261 lines
7.6 KiB
Transact-SQL
261 lines
7.6 KiB
Transact-SQL
/*
|
|
Seguimiento de solicitudes: comentarios y respuestas.
|
|
Preparado para SIG_PlataformaDesarolladores.
|
|
Pendiente de ejecución: requiere autorización separada.
|
|
Las escrituras y su bitácora comparten la transacción del servicio.
|
|
*/
|
|
SET NOCOUNT ON;
|
|
|
|
IF OBJECT_ID('dbo.Tra_Solicitudes', 'U') IS NULL
|
|
THROW 51000, 'No existe la tabla de solicitudes esperada.', 1;
|
|
|
|
IF OBJECT_ID('dbo.Sis_Usuarios', 'U') IS NULL
|
|
THROW 51000, 'No existe el catálogo de usuarios esperado.', 1;
|
|
|
|
IF OBJECT_ID('dbo.Tra_ComentariosSolicitud', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.Tra_ComentariosSolicitud
|
|
(
|
|
CveComentarioSolicitud int IDENTITY(1, 1) NOT NULL,
|
|
CveSolicitud int NOT NULL,
|
|
CveComentarioPadre int NULL,
|
|
Comentario nvarchar(4000) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
CveUsuario int NOT NULL,
|
|
FechaAlta datetime NOT NULL
|
|
CONSTRAINT DF_Tra_ComentariosSolicitud_FechaAlta DEFAULT (GETDATE()),
|
|
CONSTRAINT PK_Tra_ComentariosSolicitud PRIMARY KEY (CveComentarioSolicitud),
|
|
CONSTRAINT UQ_Tra_ComentariosSolicitud_Solicitud
|
|
UNIQUE (CveComentarioSolicitud, CveSolicitud),
|
|
CONSTRAINT FK_Tra_ComentariosSolicitud_Solicitud
|
|
FOREIGN KEY (CveSolicitud) REFERENCES dbo.Tra_Solicitudes(CveSolicitud),
|
|
CONSTRAINT FK_Tra_ComentariosSolicitud_Usuario
|
|
FOREIGN KEY (CveUsuario) REFERENCES dbo.Sis_Usuarios(CveUsuario),
|
|
CONSTRAINT FK_Tra_ComentariosSolicitud_Padre
|
|
FOREIGN KEY (CveComentarioPadre, CveSolicitud)
|
|
REFERENCES dbo.Tra_ComentariosSolicitud(CveComentarioSolicitud, CveSolicitud)
|
|
);
|
|
END;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.Tra_ComentariosSolicitud')
|
|
AND name = 'IX_Tra_ComentariosSolicitud_SolicitudFecha'
|
|
)
|
|
BEGIN
|
|
CREATE INDEX IX_Tra_ComentariosSolicitud_SolicitudFecha
|
|
ON dbo.Tra_ComentariosSolicitud(CveSolicitud, FechaAlta, CveComentarioSolicitud);
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Tra_SolicitudComentarioList
|
|
@CveSolicitud 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
|
|
C.CveComentarioSolicitud,
|
|
C.CveSolicitud,
|
|
C.CveComentarioPadre,
|
|
C.Comentario,
|
|
P.Comentario AS ComentarioPadre,
|
|
C.CveUsuario,
|
|
U.NombreUsuario AS Usuario,
|
|
C.FechaAlta
|
|
FROM dbo.Tra_ComentariosSolicitud AS C
|
|
INNER JOIN dbo.Sis_Usuarios AS U ON U.CveUsuario = C.CveUsuario
|
|
LEFT JOIN dbo.Tra_ComentariosSolicitud AS P ON P.CveComentarioSolicitud = C.CveComentarioPadre
|
|
WHERE C.CveSolicitud = @CveSolicitud
|
|
ORDER BY C.FechaAlta, C.CveComentarioSolicitud;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'No fue posible consultar los comentarios; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_SolicitudComentarioList'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE()
|
|
);
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Tra_SolicitudComentarioAdd
|
|
@CveSolicitud int,
|
|
@CveComentarioPadre int = NULL,
|
|
@Comentario nvarchar(max),
|
|
@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 @Comentario = LTRIM(RTRIM(@Comentario));
|
|
IF @Comentario IS NULL OR LEN(@Comentario) = 0 OR DATALENGTH(@Comentario) > 8000
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Capture un comentario de 1 a 4000 caracteres.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_Solicitudes
|
|
WHERE CveSolicitud = @CveSolicitud
|
|
)
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'La solicitud no está disponible.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @CveComentarioPadre IS NOT NULL AND NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_ComentariosSolicitud
|
|
WHERE CveComentarioSolicitud = @CveComentarioPadre
|
|
AND CveSolicitud = @CveSolicitud
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'El comentario al que desea responder no pertenece a la solicitud.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
INSERT INTO dbo.Tra_ComentariosSolicitud
|
|
(
|
|
CveSolicitud,
|
|
CveComentarioPadre,
|
|
Comentario,
|
|
CveUsuario
|
|
)
|
|
VALUES
|
|
(
|
|
@CveSolicitud,
|
|
@CveComentarioPadre,
|
|
@Comentario,
|
|
@CveUsuarioEjecuta
|
|
);
|
|
|
|
DECLARE @CveComentarioSolicitud int = CONVERT(int, SCOPE_IDENTITY());
|
|
|
|
SELECT
|
|
C.CveComentarioSolicitud,
|
|
C.CveSolicitud,
|
|
C.CveComentarioPadre,
|
|
C.Comentario,
|
|
P.Comentario AS ComentarioPadre,
|
|
C.CveUsuario,
|
|
U.NombreUsuario AS Usuario,
|
|
C.FechaAlta
|
|
FROM dbo.Tra_ComentariosSolicitud AS C
|
|
INNER JOIN dbo.Sis_Usuarios AS U ON U.CveUsuario = C.CveUsuario
|
|
LEFT JOIN dbo.Tra_ComentariosSolicitud AS P ON P.CveComentarioSolicitud = C.CveComentarioPadre
|
|
WHERE C.CveComentarioSolicitud = @CveComentarioSolicitud;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'No fue posible guardar el comentario; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_SolicitudComentarioAdd'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE()
|
|
);
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Bit_Tablas
|
|
WHERE NombreTablaSQL = 'Tra_ComentariosSolicitud'
|
|
)
|
|
BEGIN
|
|
INSERT INTO dbo.Bit_Tablas
|
|
(
|
|
NombreTablaSQL,
|
|
NombreMostrar,
|
|
Descripcion,
|
|
NombreCampoLlaveSQL,
|
|
Activo,
|
|
FechaAlta
|
|
)
|
|
VALUES
|
|
(
|
|
'Tra_ComentariosSolicitud',
|
|
'Comentarios de solicitudes',
|
|
'Conversación de una solicitud y respuestas a comentarios anteriores.',
|
|
'CveComentarioSolicitud',
|
|
1,
|
|
GETDATE()
|
|
);
|
|
END;
|
|
|
|
DECLARE @CveTablaComentarios int;
|
|
SELECT @CveTablaComentarios = CveTabla
|
|
FROM dbo.Bit_Tablas
|
|
WHERE NombreTablaSQL = 'Tra_ComentariosSolicitud';
|
|
|
|
INSERT INTO dbo.Bit_Campos
|
|
(
|
|
CveTabla,
|
|
NombreCampoSQL,
|
|
NombreMostrar,
|
|
TipoDatoSQL,
|
|
MostrarEnBitacora,
|
|
Activo,
|
|
FechaAlta
|
|
)
|
|
SELECT
|
|
@CveTablaComentarios,
|
|
C.NombreCampoSQL,
|
|
C.NombreMostrar,
|
|
C.TipoDatoSQL,
|
|
1,
|
|
1,
|
|
GETDATE()
|
|
FROM
|
|
(
|
|
VALUES
|
|
('CveSolicitud', 'Solicitud', 'int'),
|
|
('CveComentarioPadre', 'En respuesta a', 'int'),
|
|
('Comentario', 'Comentario', 'nvarchar')
|
|
) AS C(NombreCampoSQL, NombreMostrar, TipoDatoSQL)
|
|
WHERE NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Bit_Campos AS B
|
|
WHERE B.CveTabla = @CveTablaComentarios
|
|
AND B.NombreCampoSQL = C.NombreCampoSQL
|
|
);
|
|
GO
|