/* Revisado contra las definiciones instaladas en SIG_PlataformaDesarolladores el 14/09/2026. Incluye trece PAs existentes revisados contra SQL Server. Derivado exclusivamente de PAs existentes en: Catalogos_Tramites_Internos.sql Tramites_CambioEstatus_Procedimientos_20260908.sql Orden: compilar y verificar aplicación -> Preparar -> estos ALTER -> Finalizar. Preparar, ALTER y Finalizar se ejecutan dentro de una misma transacción. Aplicar durante mantenimiento, con las escrituras detenidas y respaldo de la BD. Conservar previamente todas las definiciones originales para rollback. Review y DownloadGet conservan sus campos y permisos existentes. StageContextGet delega en UploadContextGet y recibe su resultado actualizado. Los tres fueron revisados y no requieren modificación. La relación usa únicamente las siete columnas solicitadas. Incluye borrado y ordenamiento por clave compuesta. Los ALTER no crean procedimientos inexistentes. */ ALTER PROCEDURE dbo.PA_Tra_TipoDocumentoList @Texto varchar(250) = NULL, @IncluirInactivos bit = 0, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY SELECT CveTipoDocumento, TipoDocumento, Descripcion, ExtensionesPermitidas, TamanoMaximoMb, EsActivo FROM dbo.Tra_TiposDocumento WHERE (@IncluirInactivos = 1 OR EsActivo = 1) AND (NULLIF(LTRIM(RTRIM(@Texto)), '') IS NULL OR TipoDocumento LIKE '%' + @Texto + '%' OR Descripcion LIKE '%' + @Texto + '%' OR ExtensionesPermitidas LIKE '%' + @Texto + '%') ORDER BY TipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al consultar los tipos de documento; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_TipoDocumentoList'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tra_TipoDocumentoGet @CveTipoDocumento int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY SELECT CveTipoDocumento, TipoDocumento, Descripcion, ExtensionesPermitidas, TamanoMaximoMb, EsActivo FROM dbo.Tra_TiposDocumento WHERE CveTipoDocumento = @CveTipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al consultar el tipo de documento; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_TipoDocumentoGet'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tra_TipoDocumentoSave @CveTipoDocumento int = NULL, @TipoDocumento varchar(200), @Descripcion varchar(500) = NULL, @ExtensionesPermitidas varchar(200) = NULL, @TamanoMaximoMb int = NULL, @EsActivo bit, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY SELECT @TipoDocumento = LTRIM(RTRIM(@TipoDocumento)), @Descripcion = NULLIF(LTRIM(RTRIM(@Descripcion)), ''), @ExtensionesPermitidas = NULLIF(LTRIM(RTRIM(@ExtensionesPermitidas)), ''); IF NULLIF(@TipoDocumento, '') IS NULL BEGIN SELECT @ErrorMostrar = 'Capture el nombre del tipo de documento.', @ErrorTipo = 2; RETURN; END; IF @TamanoMaximoMb IS NOT NULL AND @TamanoMaximoMb <= 0 BEGIN SELECT @ErrorMostrar = 'El tamaño máximo debe ser mayor que cero.', @ErrorTipo = 2; RETURN; END; IF EXISTS ( SELECT 1 FROM dbo.Tra_TiposDocumento WHERE TipoDocumento = @TipoDocumento AND CveTipoDocumento <> ISNULL(@CveTipoDocumento, 0) ) BEGIN SELECT @ErrorMostrar = 'El tipo de documento ya está registrado.', @ErrorTipo = 2; RETURN; END; IF @CveTipoDocumento IS NULL BEGIN INSERT INTO dbo.Tra_TiposDocumento ( TipoDocumento, Descripcion, ExtensionesPermitidas, TamanoMaximoMb, EsActivo, CveUsuario ) VALUES ( @TipoDocumento, @Descripcion, @ExtensionesPermitidas, @TamanoMaximoMb, @EsActivo, @CveUsuarioEjecuta ); SET @CveTipoDocumento = CONVERT(int, SCOPE_IDENTITY()); END ELSE BEGIN UPDATE dbo.Tra_TiposDocumento SET TipoDocumento = @TipoDocumento, Descripcion = @Descripcion, ExtensionesPermitidas = @ExtensionesPermitidas, TamanoMaximoMb = @TamanoMaximoMb, EsActivo = @EsActivo, FechaModificacion = GETDATE(), CveUsuario = @CveUsuarioEjecuta WHERE CveTipoDocumento = @CveTipoDocumento; END; SELECT @CveTipoDocumento AS CveTipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al guardar el tipo de documento; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_TipoDocumentoSave'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tra_DocumentoRequeridoList @CveTipoTramite int = NULL, @IncluirInactivos bit = 0, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY SELECT D.CveTipoTramite, T.TipoTramite, D.CveTipoDocumento, TD.TipoDocumento, D.EsRequerido, D.EsCliente, D.TieneVigencia, D.Orden, D.EsActivo FROM dbo.Tra_TiposTramiteDocumento AS D INNER JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = D.CveTipoTramite INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = D.CveTipoDocumento WHERE (@CveTipoTramite IS NULL OR D.CveTipoTramite = @CveTipoTramite) AND (@IncluirInactivos = 1 OR D.EsActivo = 1) ORDER BY T.Orden, T.TipoTramite, D.Orden, TD.TipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al consultar los documentos requeridos; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_DocumentoRequeridoList'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tra_DocumentoRequeridoGet @CveTipoTramite int, @CveTipoDocumento int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY SELECT D.CveTipoTramite, T.TipoTramite, D.CveTipoDocumento, TD.TipoDocumento, D.EsRequerido, D.EsCliente, D.TieneVigencia, D.Orden, D.EsActivo FROM dbo.Tra_TiposTramiteDocumento AS D INNER JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = D.CveTipoTramite INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = D.CveTipoDocumento WHERE D.CveTipoTramite = @CveTipoTramite AND D.CveTipoDocumento = @CveTipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al consultar el documento requerido; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_DocumentoRequeridoGet'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tra_DocumentoRequeridoSave @CveTipoTramite int, @CveTipoDocumento int, @EsRequerido bit, @EsCliente bit, @TieneVigencia bit, @EsActivo bit, @CveTipoTramiteAnterior int = NULL, @CveTipoDocumentoAnterior int = NULL, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_TiposTramite WHERE CveTipoTramite = @CveTipoTramite ) OR NOT EXISTS ( SELECT 1 FROM dbo.Tra_TiposDocumento WHERE CveTipoDocumento = @CveTipoDocumento ) BEGIN SET @ErrorMostrar = 'Seleccione un tipo de trámite y un tipo de documento válidos.'; SET @ErrorTipo = 2; RETURN; END; IF (@CveTipoTramiteAnterior IS NULL AND @CveTipoDocumentoAnterior IS NOT NULL) OR (@CveTipoTramiteAnterior IS NOT NULL AND @CveTipoDocumentoAnterior IS NULL) BEGIN SET @ErrorMostrar = 'La clave original de la relación está incompleta.'; SET @ErrorTipo = 2; RETURN; END; IF EXISTS ( SELECT 1 FROM dbo.Tra_TiposTramiteDocumento WHERE CveTipoTramite = @CveTipoTramite AND CveTipoDocumento = @CveTipoDocumento AND ( @CveTipoTramiteAnterior IS NULL OR CveTipoTramite <> @CveTipoTramiteAnterior OR CveTipoDocumento <> @CveTipoDocumentoAnterior ) ) BEGIN SET @ErrorMostrar = 'El documento ya está asociado al tipo de trámite.'; SET @ErrorTipo = 2; RETURN; END; DECLARE @Orden int; IF @CveTipoTramiteAnterior IS NULL BEGIN SELECT @Orden = ISNULL(MAX(Orden), 0) + 1 FROM dbo.Tra_TiposTramiteDocumento WHERE CveTipoTramite = @CveTipoTramite; INSERT INTO dbo.Tra_TiposTramiteDocumento ( CveTipoTramite, CveTipoDocumento, EsRequerido, EsCliente, TieneVigencia, Orden, EsActivo ) VALUES ( @CveTipoTramite, @CveTipoDocumento, @EsRequerido, @EsCliente, @TieneVigencia, @Orden, @EsActivo ); END ELSE BEGIN SELECT @Orden = Orden FROM dbo.Tra_TiposTramiteDocumento WHERE CveTipoTramite = @CveTipoTramiteAnterior AND CveTipoDocumento = @CveTipoDocumentoAnterior; IF @Orden IS NULL BEGIN SET @ErrorMostrar = 'La relación original ya no existe.'; SET @ErrorTipo = 2; RETURN; END; IF @CveTipoTramite <> @CveTipoTramiteAnterior BEGIN SELECT @Orden = ISNULL(MAX(Orden), 0) + 1 FROM dbo.Tra_TiposTramiteDocumento WHERE CveTipoTramite = @CveTipoTramite; END; UPDATE dbo.Tra_TiposTramiteDocumento SET CveTipoTramite = @CveTipoTramite, CveTipoDocumento = @CveTipoDocumento, EsRequerido = @EsRequerido, EsCliente = @EsCliente, TieneVigencia = @TieneVigencia, Orden = @Orden, EsActivo = @EsActivo WHERE CveTipoTramite = @CveTipoTramiteAnterior AND CveTipoDocumento = @CveTipoDocumentoAnterior; END; SELECT @CveTipoDocumento AS CveTipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al guardar la relación de documentos; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_DocumentoRequeridoSave'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudFraccionamientoList @CveFraccionamiento int, @CveFraccionamientoEtapa int = NULL, @CveTipoTramite int = NULL, @IncluirRequisitos bit = 0, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY DECLARE @CveRol int; DECLARE @EsSuperUsuario bit = 0; DECLARE @CveCliente int; SELECT @CveRol = U.CveRol, @EsSuperUsuario = CASE WHEN U.CveRol <= 2 THEN 1 ELSE 0 END FROM dbo.Sis_Usuarios AS U WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1; IF @CveRol IS NULL BEGIN SET @ErrorMostrar = 'El usuario no existe o está inactivo.'; SET @ErrorTipo = 2; RETURN; END; SELECT @CveCliente = F.CveCliente FROM dbo.Fraccionamientos AS F WHERE F.CveFraccionamiento = @CveFraccionamiento; IF @CveCliente IS NULL BEGIN SET @ErrorMostrar = 'El fraccionamiento seleccionado no existe.'; SET @ErrorTipo = 2; RETURN; END; IF @EsSuperUsuario = 0 AND NOT EXISTS ( SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC WHERE UC.CveUsuario = @CveUsuarioEjecuta AND UC.CveCliente = @CveCliente AND UC.Activo = 1 ) BEGIN SET @ErrorMostrar = 'El fraccionamiento no está asignado al usuario.'; SET @ErrorTipo = 2; RETURN; END; IF @CveFraccionamientoEtapa IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM dbo.FraccionamientosEtapas AS E WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa AND E.CveFraccionamiento = @CveFraccionamiento ) BEGIN SET @ErrorMostrar = 'La etapa seleccionada no pertenece al fraccionamiento.'; SET @ErrorTipo = 2; RETURN; END; ;WITH SolicitudesBase AS ( SELECT S.CveSolicitud, S.Folio, S.CveCliente, S.CveFraccionamiento, S.CveFraccionamientoEtapa, E.Etapa, E.Orden AS OrdenEtapa, S.CveTipoTramite, TT.TipoTramite, TT.Orden AS OrdenTramite, S.CveEstatusSolicitud, ES.EsFinal FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa INNER JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = S.CveTipoTramite INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud WHERE S.CveFraccionamiento = @CveFraccionamiento AND (@CveFraccionamientoEtapa IS NULL OR S.CveFraccionamientoEtapa = @CveFraccionamientoEtapa) AND (@CveTipoTramite IS NULL OR S.CveTipoTramite = @CveTipoTramite) ), Filas AS ( /* Documentos que sí están cargados. */ SELECT DS.CveDocumentoSolicitud, SB.CveSolicitud, SB.Folio, SB.CveCliente, SB.CveFraccionamiento, SB.CveFraccionamientoEtapa, SB.Etapa, SB.OrdenEtapa, SB.CveTipoTramite, SB.TipoTramite, SB.OrdenTramite, DS.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento, DR.EsCliente, DR.TieneVigencia, CONVERT(bit, CASE WHEN DR.EsActivo = 1 THEN DR.EsRequerido ELSE 0 END) AS EsRequerido, DS.FechaDocumento, DS.FechaVencimiento, DS.NombreArchivo, DS.ComentarioAdministrativo AS Nota, DS.EsAprobado, DS.FechaRevision, SB.EsFinal AS EsFinalSolicitud, CONVERT(bit, CASE WHEN NULLIF(LTRIM(RTRIM(DS.RutaArchivo)), '') IS NOT NULL AND NULLIF(LTRIM(RTRIM(DS.NombreArchivo)), '') IS NOT NULL THEN 1 ELSE 0 END) AS TieneArchivo, CONVERT(bit, CASE WHEN SB.EsFinal = 0 AND DS.CveTipoDocumento <> 2 THEN 1 ELSE 0 END) AS PuedeActualizarArchivo, CONVERT(bit, CASE WHEN @EsSuperUsuario = 1 AND SB.EsFinal = 0 THEN 1 ELSE 0 END) AS PuedeRevisar, CONVERT(bit, CASE WHEN DS.CveTipoDocumento = 2 THEN 1 ELSE 0 END) AS EsGis, CONVERT(bit, CASE WHEN DS.CveTipoDocumento = 2 AND SB.EsFinal = 0 THEN 1 ELSE 0 END) AS PuedeAdministrarGis, CASE WHEN DS.EsAprobado = 1 THEN 'Aprobado' WHEN DS.EsAprobado = 0 THEN 'Rechazado' ELSE 'Pendiente de revisión' END AS EstadoDocumento, ISNULL(DR.Orden, 2147483647) AS OrdenDocumento FROM SolicitudesBase AS SB INNER JOIN dbo.Tra_DocumentosSolicitud AS DS ON DS.CveSolicitud = SB.CveSolicitud AND DS.EsActivo = 1 INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = DS.CveTipoDocumento LEFT JOIN dbo.Tra_TiposTramiteDocumento AS DR ON DR.CveTipoTramite = SB.CveTipoTramite AND DR.CveTipoDocumento = DS.CveTipoDocumento UNION ALL /* Requeridos que todavía no se han cargado. */ SELECT 0 AS CveDocumentoSolicitud, SB.CveSolicitud, SB.Folio, SB.CveCliente, SB.CveFraccionamiento, SB.CveFraccionamientoEtapa, SB.Etapa, SB.OrdenEtapa, SB.CveTipoTramite, SB.TipoTramite, SB.OrdenTramite, DR.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento, DR.EsCliente, DR.TieneVigencia, DR.EsRequerido, CAST(NULL AS date) AS FechaDocumento, CAST(NULL AS date) AS FechaVencimiento, NULL AS NombreArchivo, NULL AS Nota, CAST(NULL AS bit) AS EsAprobado, CAST(NULL AS datetime) AS FechaRevision, SB.EsFinal AS EsFinalSolicitud, CONVERT(bit, 0) AS TieneArchivo, CONVERT(bit, CASE WHEN DR.CveTipoDocumento <> 2 THEN 1 ELSE 0 END) AS PuedeActualizarArchivo, CONVERT(bit, 0) AS PuedeRevisar, CONVERT(bit, CASE WHEN DR.CveTipoDocumento = 2 THEN 1 ELSE 0 END) AS EsGis, CONVERT(bit, CASE WHEN DR.CveTipoDocumento = 2 THEN 1 ELSE 0 END) AS PuedeAdministrarGis, 'Sin cargar' AS EstadoDocumento, DR.Orden AS OrdenDocumento FROM SolicitudesBase AS SB INNER JOIN dbo.Tra_TiposTramiteDocumento AS DR ON DR.CveTipoTramite = SB.CveTipoTramite AND DR.EsActivo = 1 AND (@IncluirRequisitos = 1 OR DR.EsRequerido = 1) INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = DR.CveTipoDocumento AND TD.EsActivo = 1 WHERE (@IncluirRequisitos = 1 OR SB.EsFinal = 0) AND NOT EXISTS ( SELECT 1 FROM dbo.Tra_DocumentosSolicitud AS DS WHERE DS.CveSolicitud = SB.CveSolicitud AND DS.CveTipoDocumento = DR.CveTipoDocumento AND DS.EsActivo = 1 ) ) SELECT CveDocumentoSolicitud, CveSolicitud, Folio, CveCliente, CveFraccionamiento, CveFraccionamientoEtapa, Etapa, CveTipoTramite, TipoTramite, CveTipoDocumento, TipoDocumento, EsCliente, TieneVigencia, FechaDocumento, FechaVencimiento, EsRequerido, NombreArchivo, Nota, EsAprobado, FechaRevision, EsFinalSolicitud, TieneArchivo, PuedeActualizarArchivo, PuedeRevisar, EsGis, PuedeAdministrarGis, EstadoDocumento FROM Filas ORDER BY OrdenEtapa, Etapa, OrdenTramite, TipoTramite, OrdenDocumento, TipoDocumento, CveDocumentoSolicitud; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al consultar los documentos del fraccionamiento; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_DocumentoSolicitudFraccionamientoList'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudUploadContextGet @CveFraccionamiento int, @CveSolicitud int, @CveTipoDocumento int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY DECLARE @CveRol int; DECLARE @EsSuperUsuario bit = 0; DECLARE @CveCliente int; DECLARE @EsFinal bit; SELECT @CveRol = U.CveRol, @EsSuperUsuario = CASE WHEN U.CveRol <= 2 THEN 1 ELSE 0 END FROM dbo.Sis_Usuarios AS U WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1; SELECT @CveCliente = S.CveCliente, @EsFinal = ES.EsFinal FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento; IF @CveRol IS NULL BEGIN SET @ErrorMostrar = 'El usuario no existe o está inactivo.'; SET @ErrorTipo = 2; RETURN; END; IF @CveCliente IS NULL BEGIN SET @ErrorMostrar = 'La solicitud no pertenece al fraccionamiento seleccionado.'; SET @ErrorTipo = 2; RETURN; END; /* Esto valida que el usuario tenga acceso a los datos del cliente. No es una validación de catálogo. */ IF @EsSuperUsuario = 0 AND NOT EXISTS ( SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC WHERE UC.CveUsuario = @CveUsuarioEjecuta AND UC.CveCliente = @CveCliente AND UC.Activo = 1 ) BEGIN SET @ErrorMostrar = 'El fraccionamiento no está asignado al usuario.'; SET @ErrorTipo = 2; RETURN; END; -- La disponibilidad por rol y estatus se comprueba en el servicio C#. /* Sólo se valida que el tipo de documento exista y esté activo. NO se exige que aparezca como requerido. */ IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_TiposDocumento AS TD WHERE TD.CveTipoDocumento = @CveTipoDocumento AND TD.EsActivo = 1 ) BEGIN SET @ErrorMostrar = 'El tipo de documento no existe o está inactivo.'; SET @ErrorTipo = 2; RETURN; END; SELECT ISNULL(DS.CveDocumentoSolicitud, 0) AS CveDocumentoSolicitud, S.CveSolicitud, S.Folio, S.CveCliente, S.CveFraccionamiento, S.CveFraccionamientoEtapa, E.Etapa, S.CveTipoTramite, TT.TipoTramite, TD.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento, DR.EsCliente, DR.TieneVigencia, DS.FechaDocumento AS FechaDocumentoAnterior, DS.FechaVencimiento AS FechaVencimientoAnterior, TD.ExtensionesPermitidas, TD.TamanoMaximoMb, ES.EsFinal AS EsFinalSolicitud, DS.NombreArchivo AS NombreArchivoAnterior, DS.NombreArchivoFisico AS NombreArchivoFisicoAnterior, DS.RutaArchivo AS RutaArchivoAnterior, DS.ContentType AS ContentTypeAnterior, DS.TamanoBytes AS TamanoBytesAnterior, DS.ComentarioCliente AS ComentarioClienteAnterior, DS.ComentarioAdministrativo AS ComentarioAdministrativoAnterior, DS.EsAprobado AS EsAprobadoAnterior, DS.CveUsuarioRevisa AS CveUsuarioRevisaAnterior, DS.FechaRevision AS FechaRevisionAnterior FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa INNER JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = S.CveTipoTramite INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = @CveTipoDocumento INNER JOIN dbo.Tra_TiposTramiteDocumento AS DR ON DR.CveTipoTramite = S.CveTipoTramite AND DR.CveTipoDocumento = TD.CveTipoDocumento LEFT JOIN dbo.Tra_DocumentosSolicitud AS DS ON DS.CveSolicitud = S.CveSolicitud AND DS.CveTipoDocumento = @CveTipoDocumento WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al consultar el documento; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE( ERROR_PROCEDURE(), 'PA_Tramites_DocumentoSolicitudUploadContextGet' ), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudSave @CveFraccionamiento int, @CveSolicitud int, @CveTipoDocumento int, @NombreArchivo varchar(255), @NombreArchivoFisico varchar(255), @RutaArchivo varchar(1000), @ContentType varchar(100) = NULL, @TamanoBytes bigint = NULL, @ComentarioCliente varchar(1000) = NULL, @FechaDocumento date = NULL, @FechaVencimiento date = NULL, @ActualizarFechas bit = 0, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY SET @NombreArchivo = NULLIF(LTRIM(RTRIM(@NombreArchivo)), ''); SET @NombreArchivoFisico = NULLIF(LTRIM(RTRIM(@NombreArchivoFisico)), ''); SET @RutaArchivo = NULLIF(LTRIM(RTRIM(@RutaArchivo)), ''); SET @ContentType = NULLIF(LTRIM(RTRIM(@ContentType)), ''); SET @ComentarioCliente = NULLIF(LTRIM(RTRIM(@ComentarioCliente)), ''); IF @NombreArchivo IS NULL OR @NombreArchivoFisico IS NULL OR @RutaArchivo IS NULL BEGIN SET @ErrorMostrar = 'Los datos del archivo están incompletos.'; SET @ErrorTipo = 2; RETURN; END; DECLARE @CveRol int; DECLARE @EsSuperUsuario bit = 0; DECLARE @CveCliente int; DECLARE @EsFinal bit; DECLARE @CveFraccionamientoEtapa int; SELECT @CveRol = U.CveRol, @EsSuperUsuario = CASE WHEN U.CveRol <= 2 THEN 1 ELSE 0 END FROM dbo.Sis_Usuarios AS U WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1; SELECT @CveCliente = S.CveCliente, @EsFinal = ES.EsFinal, @CveFraccionamientoEtapa = S.CveFraccionamientoEtapa FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento; IF @CveRol IS NULL BEGIN SET @ErrorMostrar = 'El usuario no existe o está inactivo.'; SET @ErrorTipo = 2; RETURN; END; IF @CveCliente IS NULL BEGIN SET @ErrorMostrar = 'La solicitud no pertenece al fraccionamiento seleccionado.'; SET @ErrorTipo = 2; RETURN; END; /* Se conserva la autorización sobre los datos del fraccionamiento. No se agrega ninguna validación de catálogo. */ IF @EsSuperUsuario = 0 AND NOT EXISTS ( SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC WHERE UC.CveUsuario = @CveUsuarioEjecuta AND UC.CveCliente = @CveCliente AND UC.Activo = 1 ) BEGIN SET @ErrorMostrar = 'El fraccionamiento no está asignado al usuario.'; SET @ErrorTipo = 2; RETURN; END; -- La disponibilidad por rol y estatus se comprueba en el servicio C#. /* Sólo se valida que el tipo exista y esté activo. NO se exige EsRequerido. */ IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_TiposDocumento AS TD WHERE TD.CveTipoDocumento = @CveTipoDocumento AND TD.EsActivo = 1 ) BEGIN SET @ErrorMostrar = 'El tipo de documento no existe o está inactivo.'; SET @ErrorTipo = 2; RETURN; END; IF NOT EXISTS ( SELECT 1 FROM dbo.Tra_Solicitudes AS S INNER JOIN dbo.Tra_TiposTramiteDocumento AS R ON R.CveTipoTramite = S.CveTipoTramite AND R.CveTipoDocumento = @CveTipoDocumento WHERE S.CveSolicitud = @CveSolicitud ) BEGIN SET @ErrorMostrar = 'El documento no está configurado para este tipo de trámite.'; SET @ErrorTipo = 2; RETURN; END; DECLARE @CveDocumentoSolicitud int; DECLARE @NombreArchivoAnterior varchar(255); DECLARE @NombreArchivoFisicoAnterior varchar(255); DECLARE @RutaArchivoAnterior varchar(1000); DECLARE @ContentTypeAnterior varchar(100); DECLARE @TamanoBytesAnterior bigint; DECLARE @ComentarioClienteAnterior varchar(1000); DECLARE @ComentarioAdministrativoAnterior varchar(1000); DECLARE @EsAprobadoAnterior bit; DECLARE @CveUsuarioRevisaAnterior int; DECLARE @FechaRevisionAnterior datetime; DECLARE @EsNuevo bit = 0; DECLARE @FechaDocumentoAnterior date; DECLARE @FechaVencimientoAnterior date; SELECT @CveDocumentoSolicitud = DS.CveDocumentoSolicitud, @NombreArchivoAnterior = DS.NombreArchivo, @NombreArchivoFisicoAnterior = DS.NombreArchivoFisico, @RutaArchivoAnterior = DS.RutaArchivo, @ContentTypeAnterior = DS.ContentType, @TamanoBytesAnterior = DS.TamanoBytes, @ComentarioClienteAnterior = DS.ComentarioCliente, @ComentarioAdministrativoAnterior = DS.ComentarioAdministrativo, @EsAprobadoAnterior = DS.EsAprobado, @CveUsuarioRevisaAnterior = DS.CveUsuarioRevisa, @FechaRevisionAnterior = DS.FechaRevision, @FechaDocumentoAnterior = DS.FechaDocumento, @FechaVencimientoAnterior = DS.FechaVencimiento FROM dbo.Tra_DocumentosSolicitud AS DS WITH (UPDLOCK, HOLDLOCK) WHERE DS.CveSolicitud = @CveSolicitud AND DS.CveTipoDocumento = @CveTipoDocumento; IF @CveDocumentoSolicitud IS NULL BEGIN INSERT INTO dbo.Tra_DocumentosSolicitud ( CveSolicitud, CveFraccionamientoEtapa, FechaDocumento, FechaVencimiento, CveTipoDocumento, NombreArchivo, NombreArchivoFisico, RutaArchivo, ContentType, TamanoBytes, ComentarioCliente, ComentarioAdministrativo, EsAprobado, CveUsuarioCarga, CveUsuarioRevisa, FechaRevision ) VALUES ( @CveSolicitud, @CveFraccionamientoEtapa, @FechaDocumento, @FechaVencimiento, @CveTipoDocumento, @NombreArchivo, @NombreArchivoFisico, @RutaArchivo, @ContentType, @TamanoBytes, @ComentarioCliente, NULL, NULL, @CveUsuarioEjecuta, NULL, NULL ); SET @CveDocumentoSolicitud = CONVERT(int, SCOPE_IDENTITY()); SET @EsNuevo = 1; END ELSE BEGIN /* Al reemplazar/corregir el archivo se elimina la revisión. */ UPDATE dbo.Tra_DocumentosSolicitud SET CveFraccionamientoEtapa = @CveFraccionamientoEtapa, FechaDocumento = CASE WHEN @ActualizarFechas = 1 THEN @FechaDocumento ELSE FechaDocumento END, FechaVencimiento = CASE WHEN @ActualizarFechas = 1 THEN @FechaVencimiento ELSE FechaVencimiento END, EsActivo = 1, NombreArchivo = @NombreArchivo, NombreArchivoFisico = @NombreArchivoFisico, RutaArchivo = @RutaArchivo, ContentType = @ContentType, TamanoBytes = @TamanoBytes, ComentarioCliente = @ComentarioCliente, ComentarioAdministrativo = NULL, EsAprobado = NULL, CveUsuarioCarga = @CveUsuarioEjecuta, CveUsuarioRevisa = NULL, FechaRevision = NULL WHERE CveDocumentoSolicitud = @CveDocumentoSolicitud; END; SELECT DS.CveDocumentoSolicitud, S.CveSolicitud, S.Folio, S.CveCliente, S.CveFraccionamiento, S.CveFraccionamientoEtapa, E.Etapa, S.CveTipoTramite, TT.TipoTramite, DS.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento, DS.FechaDocumento, DS.FechaVencimiento, @FechaDocumentoAnterior AS FechaDocumentoAnterior, @FechaVencimientoAnterior AS FechaVencimientoAnterior, DS.NombreArchivo, DS.NombreArchivoFisico, DS.RutaArchivo, DS.ContentType, DS.TamanoBytes, DS.ComentarioCliente, DS.ComentarioAdministrativo, DS.EsAprobado, DS.CveUsuarioRevisa, DS.FechaRevision, @EsNuevo AS EsNuevo, @NombreArchivoAnterior AS NombreArchivoAnterior, @NombreArchivoFisicoAnterior AS NombreArchivoFisicoAnterior, @RutaArchivoAnterior AS RutaArchivoAnterior, @ContentTypeAnterior AS ContentTypeAnterior, @TamanoBytesAnterior AS TamanoBytesAnterior, @ComentarioClienteAnterior AS ComentarioClienteAnterior, @ComentarioAdministrativoAnterior AS ComentarioAdministrativoAnterior, @EsAprobadoAnterior AS EsAprobadoAnterior, @CveUsuarioRevisaAnterior AS CveUsuarioRevisaAnterior, @FechaRevisionAnterior AS FechaRevisionAnterior FROM dbo.Tra_DocumentosSolicitud AS DS INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = DS.CveSolicitud INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa INNER JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = S.CveTipoTramite INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = DS.CveTipoDocumento WHERE DS.CveDocumentoSolicitud = @CveDocumentoSolicitud; SET @Return = 1; END TRY BEGIN CATCH SET @ErrorMostrar = 'Ocurrió un error al guardar el documento; favor de contactar a Sistemas.'; SET @ErrorTipo = 1; SET @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE( ERROR_PROCEDURE(), 'PA_Tramites_DocumentoSolicitudSave' ), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tra_DocumentoRequeridoDelete @CveTipoTramite int, @CveTipoDocumento int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY DELETE dbo.Tra_TiposTramiteDocumento WHERE CveTipoTramite = @CveTipoTramite AND CveTipoDocumento = @CveTipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al eliminar el documento requerido; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_DocumentoRequeridoDelete'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE()); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tra_TipoDocumentoDelete @CveTipoDocumento int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY IF EXISTS (SELECT 1 FROM dbo.Tra_TiposTramiteDocumento WHERE CveTipoDocumento = @CveTipoDocumento) OR EXISTS (SELECT 1 FROM dbo.Tra_DocumentosSolicitud WHERE CveTipoDocumento = @CveTipoDocumento) BEGIN SELECT @ErrorMostrar = 'El tipo de documento tiene información relacionada y no puede eliminarse. Puede desactivarlo.', @ErrorTipo = 2; RETURN; END; DELETE dbo.Tra_TiposDocumento WHERE CveTipoDocumento = @CveTipoDocumento; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al eliminar el tipo de documento; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_TipoDocumentoDelete'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE()); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tra_TipoTramiteDelete @CveTipoTramite int, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY IF EXISTS (SELECT 1 FROM dbo.Tra_Solicitudes WHERE CveTipoTramite = @CveTipoTramite) OR EXISTS (SELECT 1 FROM dbo.Tra_TiposTramiteDocumento WHERE CveTipoTramite = @CveTipoTramite) OR EXISTS (SELECT 1 FROM dbo.Tra_Preguntas WHERE CveTipoTramite = @CveTipoTramite) BEGIN SELECT @ErrorMostrar = 'El tipo de trámite tiene información relacionada y no puede eliminarse. Puede desactivarlo.', @ErrorTipo = 2; RETURN; END; DELETE dbo.Tra_TiposTramite WHERE CveTipoTramite = @CveTipoTramite; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al eliminar el tipo de trámite; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_TipoTramiteDelete'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE()); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO ALTER PROCEDURE dbo.PA_Tra_CatalogoOrdenMove @Entidad varchar(40), @CveRegistro int, @CveReferencia int, @ColocarDespues bit, @CveUsuarioEjecuta int, @ErrorMostrar varchar(max) OUTPUT, @ErrorTipo int OUTPUT, @Return bit OUTPUT, @CveTipoTramite int = NULL AS BEGIN SET NOCOUNT ON; SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0; BEGIN TRY IF @CveRegistro <= 0 OR @CveReferencia <= 0 OR @CveRegistro = @CveReferencia BEGIN SELECT @ErrorMostrar = 'Seleccione una posición válida para mover el registro.', @ErrorTipo = 2; RETURN; END; IF @Entidad = 'DocumentoRequerido' AND ISNULL(@CveTipoTramite, 0) <= 0 BEGIN SELECT @ErrorMostrar = 'Seleccione el tipo de trámite del documento.', @ErrorTipo = 2; RETURN; END; DECLARE @Registros TABLE ( CveRegistro int NOT NULL PRIMARY KEY, CvePadre int NULL, Orden int NOT NULL ); IF @Entidad = 'EstatusSolicitud' BEGIN INSERT @Registros (CveRegistro, CvePadre, Orden) SELECT CveEstatusSolicitud, NULL, Orden FROM dbo.Tra_EstatusSolicitud; END ELSE IF @Entidad = 'TipoTramite' BEGIN INSERT @Registros (CveRegistro, CvePadre, Orden) SELECT CveTipoTramite, NULL, Orden FROM dbo.Tra_TiposTramite; END ELSE IF @Entidad = 'DocumentoRequerido' BEGIN INSERT @Registros (CveRegistro, CvePadre, Orden) SELECT CveTipoDocumento, CveTipoTramite, Orden FROM dbo.Tra_TiposTramiteDocumento WHERE CveTipoTramite = @CveTipoTramite; END ELSE IF @Entidad = 'Pregunta' BEGIN INSERT @Registros (CveRegistro, CvePadre, Orden) SELECT CvePregunta, CveTipoTramite, Orden FROM dbo.Tra_Preguntas; END ELSE IF @Entidad = 'OpcionPregunta' BEGIN INSERT @Registros (CveRegistro, CvePadre, Orden) SELECT CveOpcionPregunta, CvePregunta, Orden FROM dbo.Tra_OpcionesPregunta; END ELSE BEGIN SELECT @ErrorMostrar = 'El catálogo solicitado no admite reordenamiento.', @ErrorTipo = 2; RETURN; END; DECLARE @OrdenAnterior int; DECLARE @OrdenReferencia int; DECLARE @CvePadre int; DECLARE @CvePadreReferencia int; DECLARE @OrdenNuevo int; SELECT @OrdenAnterior = Orden, @CvePadre = CvePadre FROM @Registros WHERE CveRegistro = @CveRegistro; SELECT @OrdenReferencia = Orden, @CvePadreReferencia = CvePadre FROM @Registros WHERE CveRegistro = @CveReferencia; IF @OrdenAnterior IS NULL OR @OrdenReferencia IS NULL OR ISNULL(@CvePadre, -1) <> ISNULL(@CvePadreReferencia, -1) BEGIN SELECT @ErrorMostrar = 'Los registros seleccionados no pertenecen al mismo catálogo.', @ErrorTipo = 2; RETURN; END; SET @OrdenNuevo = CASE WHEN @ColocarDespues = 1 AND @OrdenAnterior < @OrdenReferencia THEN @OrdenReferencia WHEN @ColocarDespues = 1 THEN @OrdenReferencia + 1 WHEN @OrdenAnterior < @OrdenReferencia THEN @OrdenReferencia - 1 ELSE @OrdenReferencia END; IF @OrdenNuevo = @OrdenAnterior BEGIN SET @Return = 1; RETURN; END; IF @OrdenAnterior < @OrdenNuevo BEGIN UPDATE @Registros SET Orden = Orden - 1 WHERE ISNULL(CvePadre, -1) = ISNULL(@CvePadre, -1) AND CveRegistro <> @CveRegistro AND Orden > @OrdenAnterior AND Orden <= @OrdenNuevo; END ELSE BEGIN UPDATE @Registros SET Orden = Orden + 1 WHERE ISNULL(CvePadre, -1) = ISNULL(@CvePadre, -1) AND CveRegistro <> @CveRegistro AND Orden >= @OrdenNuevo AND Orden < @OrdenAnterior; END; UPDATE @Registros SET Orden = @OrdenNuevo WHERE CveRegistro = @CveRegistro; IF @Entidad = 'EstatusSolicitud' BEGIN UPDATE E SET Orden = R.Orden FROM dbo.Tra_EstatusSolicitud AS E INNER JOIN @Registros AS R ON R.CveRegistro = E.CveEstatusSolicitud WHERE E.Orden <> R.Orden; END ELSE IF @Entidad = 'TipoTramite' BEGIN UPDATE T SET Orden = R.Orden FROM dbo.Tra_TiposTramite AS T INNER JOIN @Registros AS R ON R.CveRegistro = T.CveTipoTramite WHERE T.Orden <> R.Orden; END ELSE IF @Entidad = 'DocumentoRequerido' BEGIN UPDATE D SET Orden = R.Orden FROM dbo.Tra_TiposTramiteDocumento AS D INNER JOIN @Registros AS R ON R.CveRegistro = D.CveTipoDocumento AND R.CvePadre = D.CveTipoTramite WHERE D.Orden <> R.Orden; END ELSE IF @Entidad = 'Pregunta' BEGIN UPDATE P SET Orden = R.Orden FROM dbo.Tra_Preguntas AS P INNER JOIN @Registros AS R ON R.CveRegistro = P.CvePregunta WHERE P.Orden <> R.Orden; END ELSE BEGIN UPDATE O SET Orden = R.Orden FROM dbo.Tra_OpcionesPregunta AS O INNER JOIN @Registros AS R ON R.CveRegistro = O.CveOpcionPregunta WHERE O.Orden <> R.Orden; END; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al actualizar el orden del catálogo; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0; DECLARE @ErrorTecnico nvarchar(2048) = CONCAT( 'Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_CatalogoOrdenMove'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO