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

1530 lines
51 KiB
Transact-SQL

/*
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