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

1065 lines
37 KiB
Transact-SQL

/* Configuración general más excepciones por solicitud.
Los cuatro ALTER se basan en las definiciones instaladas y respaldadas el 18/09/2026.
Los tres PAs de configuración se ejecutan desde el servicio con transacción y bitácora. */
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)
),
Configuracion AS
(
SELECT
S.CveSolicitud,
G.CveTipoDocumento,
G.EsRequerido,
G.EsCliente,
G.TieneVigencia,
G.Orden,
G.EsActivo
FROM SolicitudesBase AS S
INNER JOIN dbo.Tra_TiposTramiteDocumento AS G ON G.CveTipoTramite = S.CveTipoTramite
WHERE NOT EXISTS
(
SELECT 1
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P
WHERE P.CveSolicitud = S.CveSolicitud
AND P.CveTipoDocumento = G.CveTipoDocumento
)
UNION ALL
SELECT
P.CveSolicitud,
P.CveTipoDocumento,
P.EsRequerido,
P.EsCliente,
P.TieneVigencia,
P.Orden,
P.EsActivo
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P
INNER JOIN SolicitudesBase AS S ON S.CveSolicitud = P.CveSolicitud
),
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 Configuracion AS DR ON DR.CveSolicitud = SB.CveSolicitud
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 Configuracion AS DR ON DR.CveSolicitud = SB.CveSolicitud
AND DR.EsActivo = 1
AND (@IncluirRequisitos = 1 OR DR.EsRequerido = 1 OR EXISTS
(SELECT 1 FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P
WHERE P.CveSolicitud = SB.CveSolicitud
AND P.CveTipoDocumento = DR.CveTipoDocumento))
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,
COALESCE(P.EsCliente, DR.EsCliente) AS EsCliente,
COALESCE(P.TieneVigencia, DR.TieneVigencia) AS 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
LEFT JOIN dbo.Tra_TiposTramiteDocumento AS DR ON DR.CveTipoTramite = S.CveTipoTramite
AND DR.CveTipoDocumento = TD.CveTipoDocumento
LEFT JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS P ON P.CveSolicitud = S.CveSolicitud
AND P.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
AND
(
(P.CveSolicitud IS NOT NULL AND P.EsActivo = 1)
OR (P.CveSolicitud IS NULL AND DR.CveTipoDocumento IS NOT NULL)
);
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_SolicitudDocumentoConfiguracion
WHERE CveSolicitud = @CveSolicitud
AND CveTipoDocumento = @CveTipoDocumento
AND EsActivo = 1
)
AND 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
AND NOT EXISTS
(
SELECT 1
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P
WHERE P.CveSolicitud = S.CveSolicitud
AND P.CveTipoDocumento = @CveTipoDocumento
)
)
BEGIN
SET @ErrorMostrar = 'El documento no está habilitado para esta solicitud.';
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_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_SolicitudDocumentoConfiguracion 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
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_SolicitudDocumentoConfiguracionList
@CveFraccionamiento int,
@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
IF NOT EXISTS
(
SELECT 1
FROM dbo.Tra_Solicitudes
WHERE CveSolicitud = @CveSolicitud
AND CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'La solicitud no pertenece al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT
S.CveSolicitud,
S.CveCliente,
S.CveFraccionamiento,
S.CveFraccionamientoEtapa,
S.Folio,
E.Etapa,
T.TipoTramite,
ES.EsFinal AS EsFinalSolicitud,
D.CveTipoDocumento,
D.TipoDocumento,
COALESCE(P.EsRequerido, G.EsRequerido, CONVERT(bit, 0)) AS EsRequerido,
COALESCE(P.EsCliente, G.EsCliente, CONVERT(bit, 1)) AS EsCliente,
COALESCE(P.TieneVigencia, G.TieneVigencia, CONVERT(bit, 0)) AS TieneVigencia,
COALESCE(P.Orden, G.Orden, 0) AS Orden,
COALESCE(P.EsActivo, G.EsActivo, CONVERT(bit, 1)) AS EsActivo,
CONVERT(bit, CASE WHEN P.CveSolicitud IS NOT NULL THEN 1 ELSE 0 END) AS EsParticular,
CONVERT(bit, CASE WHEN P.CveSolicitud IS NOT NULL OR G.CveTipoDocumento IS NOT NULL THEN 1 ELSE 0 END) AS EsConfigurado
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
INNER JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = S.CveTipoTramite
INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud
CROSS JOIN dbo.Tra_TiposDocumento AS D
LEFT JOIN dbo.Tra_TiposTramiteDocumento AS G ON G.CveTipoTramite = S.CveTipoTramite
AND G.CveTipoDocumento = D.CveTipoDocumento
LEFT JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS P ON P.CveSolicitud = S.CveSolicitud
AND P.CveTipoDocumento = D.CveTipoDocumento
WHERE S.CveSolicitud = @CveSolicitud
AND (D.EsActivo = 1 OR P.CveSolicitud IS NOT NULL OR G.CveTipoDocumento IS NOT NULL)
ORDER BY COALESCE(P.Orden, G.Orden, 0), D.TipoDocumento;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al procesar la configuración de documentos; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_SolicitudDocumentoConfiguracionList'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_SolicitudDocumentoConfiguracionSave
@CveFraccionamiento int,
@CveSolicitud int,
@CveTipoDocumento int,
@EsRequerido bit,
@EsCliente bit,
@TieneVigencia bit,
@Orden int,
@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
IF NOT EXISTS
(
SELECT 1
FROM dbo.Tra_Solicitudes
WHERE CveSolicitud = @CveSolicitud
AND CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'La solicitud no pertenece al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.Tra_TiposDocumento
WHERE CveTipoDocumento = @CveTipoDocumento
)
BEGIN
SET @ErrorMostrar = 'Seleccione un tipo de documento válido.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM dbo.Tra_SolicitudDocumentoConfiguracion WITH (UPDLOCK, HOLDLOCK)
WHERE CveSolicitud = @CveSolicitud
AND CveTipoDocumento = @CveTipoDocumento
)
BEGIN
UPDATE dbo.Tra_SolicitudDocumentoConfiguracion
SET
EsRequerido = @EsRequerido,
EsCliente = @EsCliente,
TieneVigencia = @TieneVigencia,
Orden = @Orden,
EsActivo = @EsActivo
WHERE CveSolicitud = @CveSolicitud
AND CveTipoDocumento = @CveTipoDocumento;
END
ELSE
BEGIN
INSERT INTO dbo.Tra_SolicitudDocumentoConfiguracion
(CveSolicitud, CveTipoDocumento, EsRequerido, EsCliente, TieneVigencia, Orden, EsActivo)
VALUES
(@CveSolicitud, @CveTipoDocumento, @EsRequerido, @EsCliente, @TieneVigencia, @Orden, @EsActivo);
END;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al procesar la configuración de documentos; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_SolicitudDocumentoConfiguracionSave'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_SolicitudDocumentoConfiguracionDelete
@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
IF NOT EXISTS
(
SELECT 1
FROM dbo.Tra_Solicitudes
WHERE CveSolicitud = @CveSolicitud
AND CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'La solicitud no pertenece al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
DELETE FROM dbo.Tra_SolicitudDocumentoConfiguracion
WHERE CveSolicitud = @CveSolicitud
AND CveTipoDocumento = @CveTipoDocumento;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al procesar la configuración de documentos; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_SolicitudDocumentoConfiguracionDelete'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO