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

1606 lines
72 KiB
Transact-SQL

/* Adaptación de los PA instalados. Preparado para revisión; no ejecutado.
Requiere Documentos_Etapa_Estructura_20260927.sql.
Conserva Job_VerificaVigencias / Horario_VerificaVigencias_0300 (03:00 Hermosillo). */
CREATE OR 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 @CveCliente int;
DECLARE @EsDesarrollador bit;
SELECT @CveCliente = F.CveCliente
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento;
SELECT @EsDesarrollador = CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = U.CveRol AND R.Activo = 1
WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1;
IF @CveCliente IS NULL OR @EsDesarrollador IS NULL OR
(
@EsDesarrollador = 1 AND NOT EXISTS
(
SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C ON C.CveCliente = UC.CveCliente AND C.Estatus = 1
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = @CveCliente AND UC.Activo = 1
)
)
BEGIN
SET @ErrorMostrar = 'No tiene acceso al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @Hoy date = CONVERT(date, SYSDATETIMEOFFSET() AT TIME ZONE 'US Mountain Standard Time');
;WITH Configuracion AS
(
SELECT S.CveSolicitud, S.CveFraccionamientoEtapa, G.CveTipoDocumento,
COALESCE(P.EsRequerido, G.EsRequerido) AS EsRequerido,
COALESCE(P.EsCliente, G.EsCliente) AS EsCliente,
COALESCE(P.TieneVigencia, G.TieneVigencia) AS TieneVigencia,
COALESCE(P.EsActivo, G.EsActivo) AS EsActivo,
E.EsFinal, S.CveTipoTramite, S.Folio
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Tra_EstatusSolicitud AS E ON E.CveEstatusSolicitud = S.CveEstatusSolicitud
INNER JOIN dbo.Tra_TiposTramiteDocumento AS G ON G.CveTipoTramite = S.CveTipoTramite
LEFT JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS P ON P.CveSolicitud = S.CveSolicitud
AND P.CveTipoDocumento = G.CveTipoDocumento
UNION ALL
SELECT P.CveSolicitud, P.CveFraccionamientoEtapa, P.CveTipoDocumento,
P.EsRequerido, P.EsCliente, P.TieneVigencia, P.EsActivo,
ISNULL(E.EsFinal, 0), S.CveTipoTramite, S.Folio
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = P.CveSolicitud
LEFT JOIN dbo.Tra_EstatusSolicitud AS E ON E.CveEstatusSolicitud = S.CveEstatusSolicitud
WHERE P.CveSolicitud IS NULL OR NOT EXISTS
(
SELECT 1 FROM dbo.Tra_TiposTramiteDocumento AS G
WHERE G.CveTipoTramite = S.CveTipoTramite
AND G.CveTipoDocumento = P.CveTipoDocumento
)
),
Requisitos AS
(
SELECT C.CveFraccionamientoEtapa, C.CveTipoDocumento,
CONVERT(bit, MAX(CASE WHEN C.EsActivo = 1 AND C.EsRequerido = 1
AND C.EsFinal = 0 AND T.EsActivo = 1 THEN 1 ELSE 0 END)) AS EsRequerido,
CONVERT(bit, MAX(CONVERT(int, C.EsCliente))) AS EsCliente,
CONVERT(bit, MAX(CONVERT(int, C.TieneVigencia))) AS TieneVigencia,
CONVERT(bit, MAX(CASE WHEN C.EsActivo = 1 AND C.EsFinal = 0 THEN 1 ELSE 0 END)) AS TieneContextoAbierto
FROM Configuracion AS C
INNER JOIN dbo.Tra_TiposDocumento AS T ON T.CveTipoDocumento = C.CveTipoDocumento
GROUP BY C.CveFraccionamientoEtapa, C.CveTipoDocumento
),
Claves AS
(
SELECT CveFraccionamientoEtapa, CveTipoDocumento FROM Requisitos
UNION
SELECT CveFraccionamientoEtapa, CveTipoDocumento
FROM dbo.Tra_DocumentosSolicitud WHERE EsActivo = 1
),
Filas AS
(
SELECT K.CveFraccionamientoEtapa, K.CveTipoDocumento,
ISNULL(C.CveSolicitud, 0) AS CveSolicitud,
C.CveTipoTramite, C.Folio,
CASE WHEN @IncluirRequisitos = 1 THEN C.EsRequerido ELSE R.EsRequerido END AS EsRequerido,
COALESCE(C.EsCliente, R.EsCliente, CONVERT(bit, 1)) AS EsCliente,
COALESCE(C.TieneVigencia, R.TieneVigencia, CONVERT(bit, 0)) AS TieneVigencia,
ISNULL(R.EsRequerido, 0) AS RequeridoEtapa,
ISNULL(R.TieneContextoAbierto, 0) AS TieneContextoAbierto
FROM Claves AS K
LEFT JOIN Requisitos AS R ON R.CveFraccionamientoEtapa = K.CveFraccionamientoEtapa
AND R.CveTipoDocumento = K.CveTipoDocumento
LEFT JOIN Configuracion AS C ON @IncluirRequisitos = 1
AND C.CveFraccionamientoEtapa = K.CveFraccionamientoEtapa
AND C.CveTipoDocumento = K.CveTipoDocumento AND C.EsActivo = 1
WHERE @IncluirRequisitos = 0 OR C.CveTipoDocumento IS NOT NULL
)
SELECT
ISNULL(D.CveDocumentoSolicitud, 0) AS CveDocumentoSolicitud,
F.CveSolicitud, F.Folio, E.CveFraccionamientoEtapa, E.CveFraccionamiento,
@CveCliente AS CveCliente, E.Etapa,
ISNULL(F.CveTipoTramite, 0) AS CveTipoTramite, T.TipoTramite,
F.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento,
D.NombreArchivo, COALESCE(D.ComentarioAdministrativo, D.ComentarioCliente) AS Nota,
D.EsAprobado, D.FechaRevision, D.FechaDocumento, D.FechaVencimiento,
CONVERT(bit, ISNULL(F.EsRequerido, 0)) AS EsRequerido, F.EsCliente, F.TieneVigencia,
CONVERT(bit, CASE WHEN D.CveDocumentoSolicitud IS NULL THEN 0 ELSE 1 END) AS TieneArchivo,
CONVERT(bit, CASE WHEN F.TieneContextoAbierto = 1 THEN 0 ELSE 1 END) AS EsFinalSolicitud,
CONVERT(bit, CASE WHEN D.FechaVencimiento < @Hoy THEN 1 ELSE 0 END) AS FechaExpirada,
ISNULL(D.Vencido, CONVERT(bit, 0)) AS Vencido,
CONVERT(bit, CASE WHEN F.CveTipoDocumento = 2 THEN 1 ELSE 0 END) AS EsGis,
CONVERT(bit, CASE WHEN F.CveTipoDocumento = 2 THEN 1 ELSE 0 END) AS PuedeAdministrarGis,
CONVERT(bit, CASE WHEN F.CveTipoDocumento <> 2 THEN 1 ELSE 0 END) AS PuedeActualizarArchivo,
CONVERT(bit, CASE WHEN @EsDesarrollador = 0 AND D.CveDocumentoSolicitud IS NOT NULL THEN 1 ELSE 0 END) AS PuedeRevisar,
CASE
WHEN D.CveDocumentoSolicitud IS NULL THEN 'Pendiente'
WHEN D.FechaVencimiento < @Hoy AND F.RequeridoEtapa = 1 THEN 'Vencido'
WHEN D.EsAprobado = 1 THEN 'Aprobado'
WHEN D.EsAprobado = 0 THEN 'Rechazado'
ELSE 'Por aprobar'
END AS EstadoDocumento
FROM Filas AS F
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = F.CveFraccionamientoEtapa
INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = F.CveTipoDocumento
LEFT JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = F.CveTipoTramite
LEFT JOIN dbo.Tra_DocumentosSolicitud AS D ON D.CveFraccionamientoEtapa = F.CveFraccionamientoEtapa
AND D.CveTipoDocumento = F.CveTipoDocumento AND D.EsActivo = 1
WHERE E.CveFraccionamiento = @CveFraccionamiento
AND (@CveFraccionamientoEtapa IS NULL OR E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa)
AND (D.CveDocumentoSolicitud IS NOT NULL OR F.EsRequerido = 1 OR @IncluirRequisitos = 1)
AND (@CveTipoTramite IS NULL OR EXISTS
(
SELECT 1 FROM Configuracion AS C
WHERE C.CveFraccionamientoEtapa = F.CveFraccionamientoEtapa
AND C.CveTipoDocumento = F.CveTipoDocumento AND C.CveTipoTramite = @CveTipoTramite
AND C.EsActivo = 1
))
ORDER BY E.Orden, E.Etapa, TD.TipoDocumento;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte a Sistemas.',
@ErrorTipo = 1,
@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
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudUploadContextGet
@CveFraccionamiento int,
@CveSolicitud int = NULL,
@CveTipoDocumento int,
@CveFraccionamientoEtapa 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
DECLARE @CveCliente int;
DECLARE @EsDesarrollador bit;
SELECT @CveCliente = F.CveCliente
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento;
SELECT @EsDesarrollador = CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = U.CveRol AND R.Activo = 1
WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1;
IF @CveCliente IS NULL OR @EsDesarrollador IS NULL OR
(
@EsDesarrollador = 1 AND NOT EXISTS
(
SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C ON C.CveCliente = UC.CveCliente AND C.Estatus = 1
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = @CveCliente AND UC.Activo = 1
)
)
BEGIN
SET @ErrorMostrar = 'No tiene acceso al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
SET @CveSolicitud = NULLIF(@CveSolicitud, 0);
IF @CveSolicitud IS NOT NULL
BEGIN
SELECT @CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
FROM dbo.Tra_Solicitudes AS S
WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento
AND (@CveFraccionamientoEtapa IS NULL OR S.CveFraccionamientoEtapa = @CveFraccionamientoEtapa);
IF NOT EXISTS
(
SELECT 1 FROM dbo.Tra_Solicitudes
WHERE CveSolicitud = @CveSolicitud AND CveFraccionamiento = @CveFraccionamiento
AND CveFraccionamientoEtapa = @CveFraccionamientoEtapa
)
BEGIN
SET @ErrorMostrar = 'La solicitud no pertenece a la etapa seleccionada.';
SET @ErrorTipo = 2;
RETURN;
END;
END;
IF NOT EXISTS
(
SELECT 1 FROM dbo.FraccionamientosEtapas
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'Seleccione una etapa del fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
;WITH Configuracion AS
(
SELECT S.CveSolicitud, S.CveFraccionamientoEtapa, G.CveTipoDocumento,
COALESCE(P.EsRequerido, G.EsRequerido) AS EsRequerido,
COALESCE(P.EsCliente, G.EsCliente) AS EsCliente,
COALESCE(P.TieneVigencia, G.TieneVigencia) AS TieneVigencia,
COALESCE(P.EsActivo, G.EsActivo) AS EsActivo,
E.EsFinal, S.CveTipoTramite, S.Folio
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Tra_EstatusSolicitud AS E ON E.CveEstatusSolicitud = S.CveEstatusSolicitud
INNER JOIN dbo.Tra_TiposTramiteDocumento AS G ON G.CveTipoTramite = S.CveTipoTramite
LEFT JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS P ON P.CveSolicitud = S.CveSolicitud
AND P.CveTipoDocumento = G.CveTipoDocumento
UNION ALL
SELECT P.CveSolicitud, P.CveFraccionamientoEtapa, P.CveTipoDocumento,
P.EsRequerido, P.EsCliente, P.TieneVigencia, P.EsActivo,
ISNULL(E.EsFinal, 0), S.CveTipoTramite, S.Folio
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = P.CveSolicitud
LEFT JOIN dbo.Tra_EstatusSolicitud AS E ON E.CveEstatusSolicitud = S.CveEstatusSolicitud
WHERE P.CveSolicitud IS NULL OR NOT EXISTS
(
SELECT 1 FROM dbo.Tra_TiposTramiteDocumento AS G
WHERE G.CveTipoTramite = S.CveTipoTramite
AND G.CveTipoDocumento = P.CveTipoDocumento
)
),
Requisitos AS
(
SELECT C.CveFraccionamientoEtapa, C.CveTipoDocumento,
CONVERT(bit, MAX(CASE WHEN C.EsActivo = 1 AND C.EsRequerido = 1
AND C.EsFinal = 0 AND T.EsActivo = 1 THEN 1 ELSE 0 END)) AS EsRequerido,
CONVERT(bit, MAX(CONVERT(int, C.EsCliente))) AS EsCliente,
CONVERT(bit, MAX(CONVERT(int, C.TieneVigencia))) AS TieneVigencia,
CONVERT(bit, MAX(CASE WHEN C.EsActivo = 1 AND C.EsFinal = 0 THEN 1 ELSE 0 END)) AS TieneContextoAbierto
FROM Configuracion AS C
INNER JOIN dbo.Tra_TiposDocumento AS T ON T.CveTipoDocumento = C.CveTipoDocumento
GROUP BY C.CveFraccionamientoEtapa, C.CveTipoDocumento
)
SELECT
ISNULL(D.CveDocumentoSolicitud, 0) AS CveDocumentoSolicitud,
ISNULL(@CveSolicitud, 0) AS CveSolicitud, S.Folio,
@CveCliente AS CveCliente, E.CveFraccionamiento, E.CveFraccionamientoEtapa, E.Etapa,
ISNULL(S.CveTipoTramite, 0) AS CveTipoTramite, T.TipoTramite,
TD.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento,
ISNULL(R.EsCliente, CONVERT(bit, 1)) AS EsCliente,
ISNULL(R.TieneVigencia, CONVERT(bit, 0)) AS TieneVigencia,
CONVERT(bit, CASE WHEN R.TieneContextoAbierto = 1 THEN 0 ELSE 1 END) AS EsFinalSolicitud,
TD.ExtensionesPermitidas, TD.TamanoMaximoMb,
D.FechaDocumento AS FechaDocumentoAnterior, D.FechaVencimiento AS FechaVencimientoAnterior,
D.NombreArchivo AS NombreArchivoAnterior, D.NombreArchivoFisico AS NombreArchivoFisicoAnterior,
D.RutaArchivo AS RutaArchivoAnterior, D.ContentType AS ContentTypeAnterior,
D.TamanoBytes AS TamanoBytesAnterior, D.ComentarioCliente AS ComentarioClienteAnterior,
D.ComentarioAdministrativo AS ComentarioAdministrativoAnterior,
D.EsAprobado AS EsAprobadoAnterior, D.CveUsuarioRevisa AS CveUsuarioRevisaAnterior,
D.FechaRevision AS FechaRevisionAnterior
FROM dbo.FraccionamientosEtapas AS E
CROSS JOIN dbo.Tra_TiposDocumento AS TD
LEFT JOIN Requisitos AS R ON R.CveFraccionamientoEtapa = E.CveFraccionamientoEtapa
AND R.CveTipoDocumento = TD.CveTipoDocumento
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = @CveSolicitud
LEFT JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = S.CveTipoTramite
LEFT JOIN dbo.Tra_DocumentosSolicitud AS D ON D.CveFraccionamientoEtapa = E.CveFraccionamientoEtapa
AND D.CveTipoDocumento = TD.CveTipoDocumento AND D.EsActivo = 1
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND TD.CveTipoDocumento = @CveTipoDocumento
AND TD.EsActivo = 1
AND (R.CveTipoDocumento IS NOT NULL OR D.CveDocumentoSolicitud IS NOT NULL);
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte a Sistemas.',
@ErrorTipo = 1,
@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
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_DocumentoEtapaVencimientoActualizar
@CveFraccionamientoEtapa 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
DECLARE @Hoy date = CONVERT(date, SYSDATETIMEOFFSET() AT TIME ZONE 'US Mountain Standard Time');
;WITH Configuracion AS
(
SELECT S.CveSolicitud, S.CveFraccionamientoEtapa, G.CveTipoDocumento,
COALESCE(P.EsRequerido, G.EsRequerido) AS EsRequerido,
COALESCE(P.EsCliente, G.EsCliente) AS EsCliente,
COALESCE(P.TieneVigencia, G.TieneVigencia) AS TieneVigencia,
COALESCE(P.EsActivo, G.EsActivo) AS EsActivo,
E.EsFinal, S.CveTipoTramite, S.Folio
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Tra_EstatusSolicitud AS E ON E.CveEstatusSolicitud = S.CveEstatusSolicitud
INNER JOIN dbo.Tra_TiposTramiteDocumento AS G ON G.CveTipoTramite = S.CveTipoTramite
LEFT JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS P ON P.CveSolicitud = S.CveSolicitud
AND P.CveTipoDocumento = G.CveTipoDocumento
UNION ALL
SELECT P.CveSolicitud, P.CveFraccionamientoEtapa, P.CveTipoDocumento,
P.EsRequerido, P.EsCliente, P.TieneVigencia, P.EsActivo,
ISNULL(E.EsFinal, 0), S.CveTipoTramite, S.Folio
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = P.CveSolicitud
LEFT JOIN dbo.Tra_EstatusSolicitud AS E ON E.CveEstatusSolicitud = S.CveEstatusSolicitud
WHERE P.CveSolicitud IS NULL OR NOT EXISTS
(
SELECT 1 FROM dbo.Tra_TiposTramiteDocumento AS G
WHERE G.CveTipoTramite = S.CveTipoTramite
AND G.CveTipoDocumento = P.CveTipoDocumento
)
),
Requisitos AS
(
SELECT C.CveFraccionamientoEtapa, C.CveTipoDocumento,
CONVERT(bit, MAX(CASE WHEN C.EsActivo = 1 AND C.EsRequerido = 1
AND C.EsFinal = 0 AND T.EsActivo = 1 THEN 1 ELSE 0 END)) AS EsRequerido,
CONVERT(bit, MAX(CONVERT(int, C.EsCliente))) AS EsCliente,
CONVERT(bit, MAX(CONVERT(int, C.TieneVigencia))) AS TieneVigencia,
CONVERT(bit, MAX(CASE WHEN C.EsActivo = 1 AND C.EsFinal = 0 THEN 1 ELSE 0 END)) AS TieneContextoAbierto
FROM Configuracion AS C
INNER JOIN dbo.Tra_TiposDocumento AS T ON T.CveTipoDocumento = C.CveTipoDocumento
GROUP BY C.CveFraccionamientoEtapa, C.CveTipoDocumento
)
UPDATE D
SET Vencido = CONVERT(bit, CASE WHEN D.EsActivo = 1
AND D.FechaVencimiento < @Hoy AND R.EsRequerido = 1 THEN 1 ELSE 0 END)
FROM dbo.Tra_DocumentosSolicitud AS D
LEFT JOIN Requisitos AS R ON R.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
AND R.CveTipoDocumento = D.CveTipoDocumento
WHERE @CveFraccionamientoEtapa IS NULL OR D.CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_DocumentoEtapaVencimientoActualizar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudSave
@CveFraccionamiento int,
@CveSolicitud int = NULL,
@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,
@CveFraccionamientoEtapa 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
DECLARE @CveCliente int;
DECLARE @EsDesarrollador bit;
SELECT @CveCliente = F.CveCliente
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento;
SELECT @EsDesarrollador = CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = U.CveRol AND R.Activo = 1
WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1;
IF @CveCliente IS NULL OR @EsDesarrollador IS NULL OR
(
@EsDesarrollador = 1 AND NOT EXISTS
(
SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C ON C.CveCliente = UC.CveCliente AND C.Estatus = 1
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = @CveCliente AND UC.Activo = 1
)
)
BEGIN
SET @ErrorMostrar = 'No tiene acceso al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
SET @CveSolicitud = NULLIF(@CveSolicitud, 0);
IF @CveSolicitud IS NOT NULL
BEGIN
SELECT @CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
FROM dbo.Tra_Solicitudes AS S
WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento
AND (@CveFraccionamientoEtapa IS NULL OR S.CveFraccionamientoEtapa = @CveFraccionamientoEtapa);
IF NOT EXISTS
(
SELECT 1 FROM dbo.Tra_Solicitudes
WHERE CveSolicitud = @CveSolicitud AND CveFraccionamiento = @CveFraccionamiento
AND CveFraccionamientoEtapa = @CveFraccionamientoEtapa
)
BEGIN
SET @ErrorMostrar = 'La solicitud no pertenece a la etapa seleccionada.';
SET @ErrorTipo = 2;
RETURN;
END;
END;
IF NOT EXISTS
(
SELECT 1 FROM dbo.FraccionamientosEtapas
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'Seleccione una etapa del fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
IF NULLIF(LTRIM(RTRIM(@NombreArchivo)), '') IS NULL
OR NULLIF(LTRIM(RTRIM(@RutaArchivo)), '') IS NULL
OR NULLIF(LTRIM(RTRIM(@NombreArchivoFisico)), '') IS NULL
BEGIN
SET @ErrorMostrar = 'Los datos del archivo están incompletos.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT D.* INTO #Anterior
FROM dbo.Tra_DocumentosSolicitud AS D WITH (UPDLOCK, HOLDLOCK)
WHERE D.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND D.CveTipoDocumento = @CveTipoDocumento AND D.EsActivo = 1;
IF @ActualizarFechas = 0
BEGIN
SELECT @FechaDocumento = FechaDocumento,
@FechaVencimiento = FechaVencimiento
FROM #Anterior;
END;
DECLARE @CveDocumento int;
IF @CveTipoDocumento = 2 AND EXISTS (SELECT 1 FROM #Anterior)
BEGIN
-- GIS conserva su reemplazo físico establecido; no inventa versiones del mismo archivo.
SELECT @CveDocumento = CveDocumentoSolicitud FROM #Anterior;
UPDATE dbo.Tra_DocumentosSolicitud
SET NombreArchivo = @NombreArchivo,
NombreArchivoFisico = @NombreArchivoFisico,
RutaArchivo = @RutaArchivo,
ContentType = @ContentType,
TamanoBytes = @TamanoBytes,
ComentarioCliente = @ComentarioCliente,
EsAprobado = NULL,
ComentarioAdministrativo = NULL,
CveUsuarioRevisa = NULL,
FechaRevision = NULL,
CveUsuarioCarga = @CveUsuarioEjecuta,
FechaDocumento = @FechaDocumento,
FechaVencimiento = @FechaVencimiento,
Vencido = 0
WHERE CveDocumentoSolicitud = @CveDocumento;
END
ELSE
BEGIN
-- La renovación crea una versión; nunca borra la revisión ni el archivo anterior.
UPDATE dbo.Tra_DocumentosSolicitud
SET EsActivo = 0, Vencido = 0
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND CveTipoDocumento = @CveTipoDocumento AND EsActivo = 1;
INSERT INTO dbo.Tra_DocumentosSolicitud
(
CveSolicitud, CveFraccionamientoEtapa, CveTipoDocumento,
NombreArchivo, NombreArchivoFisico, RutaArchivo, ContentType, TamanoBytes,
ComentarioCliente, CveUsuarioCarga, FechaDocumento, FechaVencimiento, EsActivo, Vencido
)
VALUES
(
@CveSolicitud, @CveFraccionamientoEtapa, @CveTipoDocumento,
@NombreArchivo, @NombreArchivoFisico, @RutaArchivo, @ContentType, @TamanoBytes,
@ComentarioCliente, @CveUsuarioEjecuta, @FechaDocumento, @FechaVencimiento, 1, 0
);
SET @CveDocumento = CONVERT(int, SCOPE_IDENTITY());
END;
SELECT D.CveDocumentoSolicitud, ISNULL(D.CveSolicitud, 0) AS CveSolicitud,
S.Folio, F.CveCliente, E.CveFraccionamiento, E.CveFraccionamientoEtapa, E.Etapa,
ISNULL(S.CveTipoTramite, 0) AS CveTipoTramite, T.TipoTramite,
D.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento,
D.NombreArchivo, D.NombreArchivoFisico, D.RutaArchivo, D.ContentType, D.TamanoBytes,
D.FechaDocumento, D.FechaVencimiento, D.ComentarioCliente, D.ComentarioAdministrativo,
D.EsAprobado, D.CveUsuarioRevisa, D.FechaRevision,
CONVERT(bit, CASE WHEN A.CveDocumentoSolicitud IS NULL THEN 1 ELSE 0 END) AS EsNuevo,
A.NombreArchivo AS NombreArchivoAnterior,
A.NombreArchivoFisico AS NombreArchivoFisicoAnterior,
A.RutaArchivo AS RutaArchivoAnterior,
A.ContentType AS ContentTypeAnterior,
A.TamanoBytes AS TamanoBytesAnterior,
A.ComentarioCliente AS ComentarioClienteAnterior,
A.ComentarioAdministrativo AS ComentarioAdministrativoAnterior,
A.EsAprobado AS EsAprobadoAnterior,
A.CveUsuarioRevisa AS CveUsuarioRevisaAnterior,
A.FechaRevision AS FechaRevisionAnterior,
A.FechaDocumento AS FechaDocumentoAnterior,
A.FechaVencimiento AS FechaVencimientoAnterior
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = D.CveTipoDocumento
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud
LEFT JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = S.CveTipoTramite
LEFT JOIN #Anterior AS A ON A.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
AND A.CveTipoDocumento = D.CveTipoDocumento
WHERE D.CveDocumentoSolicitud = @CveDocumento;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte a Sistemas.',
@ErrorTipo = 1,
@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
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudDownloadGet
@CveFraccionamiento int,
@CveDocumentoSolicitud 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 @CveCliente int;
DECLARE @EsDesarrollador bit;
SELECT @CveCliente = F.CveCliente
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento;
SELECT @EsDesarrollador = CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = U.CveRol AND R.Activo = 1
WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1;
IF @CveCliente IS NULL OR @EsDesarrollador IS NULL OR
(
@EsDesarrollador = 1 AND NOT EXISTS
(
SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C ON C.CveCliente = UC.CveCliente AND C.Estatus = 1
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = @CveCliente AND UC.Activo = 1
)
)
BEGIN
SET @ErrorMostrar = 'No tiene acceso al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT D.CveDocumentoSolicitud, ISNULL(D.CveSolicitud, 0) AS CveSolicitud,
S.Folio, F.CveCliente, E.CveFraccionamiento, E.CveFraccionamientoEtapa, E.Etapa,
ISNULL(S.CveTipoTramite, 0) AS CveTipoTramite, T.TipoTramite,
D.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento,
D.NombreArchivo, D.NombreArchivoFisico, D.RutaArchivo, D.ContentType, D.TamanoBytes
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = D.CveTipoDocumento
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud
LEFT JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = S.CveTipoTramite
WHERE D.CveDocumentoSolicitud = @CveDocumentoSolicitud
AND E.CveFraccionamiento = @CveFraccionamiento;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_DocumentoSolicitudDownloadGet'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudDelete
@CveFraccionamiento int,
@CveDocumentoSolicitud 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 @CveCliente int;
DECLARE @EsDesarrollador bit;
SELECT @CveCliente = F.CveCliente
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento;
SELECT @EsDesarrollador = CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = U.CveRol AND R.Activo = 1
WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1;
IF @CveCliente IS NULL OR @EsDesarrollador IS NULL OR
(
@EsDesarrollador = 1 AND NOT EXISTS
(
SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C ON C.CveCliente = UC.CveCliente AND C.Estatus = 1
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = @CveCliente AND UC.Activo = 1
)
)
BEGIN
SET @ErrorMostrar = 'No tiene acceso al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT D.CveDocumentoSolicitud, ISNULL(D.CveSolicitud, 0) AS CveSolicitud,
S.Folio, F.CveCliente, E.CveFraccionamiento, E.CveFraccionamientoEtapa, E.Etapa,
ISNULL(S.CveTipoTramite, 0) AS CveTipoTramite, T.TipoTramite,
D.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento,
D.NombreArchivo, D.NombreArchivoFisico, D.RutaArchivo, D.ContentType, D.TamanoBytes
INTO #DocumentoEliminar
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = D.CveTipoDocumento
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud
LEFT JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = S.CveTipoTramite
WHERE D.CveDocumentoSolicitud = @CveDocumentoSolicitud
AND E.CveFraccionamiento = @CveFraccionamiento AND D.EsActivo = 1;
DELETE D
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN #DocumentoEliminar AS E ON E.CveDocumentoSolicitud = D.CveDocumentoSolicitud;
SELECT * FROM #DocumentoEliminar;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_DocumentoSolicitudDelete'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudReview
@CveFraccionamiento int,
@CveDocumentoSolicitud int,
@Aprobar bit,
@Nota varchar(1000) = 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
DECLARE @CveCliente int;
DECLARE @EsDesarrollador bit;
SELECT @CveCliente = F.CveCliente
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento;
SELECT @EsDesarrollador = CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = U.CveRol AND R.Activo = 1
WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1;
IF @CveCliente IS NULL OR @EsDesarrollador IS NULL OR
(
@EsDesarrollador = 1 AND NOT EXISTS
(
SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C ON C.CveCliente = UC.CveCliente AND C.Estatus = 1
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = @CveCliente AND UC.Activo = 1
)
)
BEGIN
SET @ErrorMostrar = 'No tiene acceso al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @EsDesarrollador = 1
BEGIN
SET @ErrorMostrar = 'La revisión corresponde a Agua de Hermosillo.';
SET @ErrorTipo = 2;
RETURN;
END;
SET @Nota = NULLIF(LTRIM(RTRIM(@Nota)), '');
IF @Aprobar = 0 AND @Nota IS NULL
BEGIN
SET @ErrorMostrar = 'Capture el motivo del rechazo.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT D.* INTO #Anterior
FROM dbo.Tra_DocumentosSolicitud AS D WITH (UPDLOCK, HOLDLOCK)
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
WHERE D.CveDocumentoSolicitud = @CveDocumentoSolicitud
AND E.CveFraccionamiento = @CveFraccionamiento AND D.EsActivo = 1;
IF NOT EXISTS (SELECT 1 FROM #Anterior)
BEGIN
SET @ErrorMostrar = 'El documento ya no es la versión vigente.';
SET @ErrorTipo = 2;
RETURN;
END;
UPDATE dbo.Tra_DocumentosSolicitud
SET EsAprobado = @Aprobar,
ComentarioAdministrativo = CASE WHEN @Aprobar = 0 THEN @Nota ELSE NULL END,
CveUsuarioRevisa = @CveUsuarioEjecuta,
FechaRevision = GETDATE()
WHERE CveDocumentoSolicitud = @CveDocumentoSolicitud;
SELECT D.CveDocumentoSolicitud, ISNULL(D.CveSolicitud, 0) AS CveSolicitud,
S.Folio, F.CveCliente, E.CveFraccionamiento, E.CveFraccionamientoEtapa, E.Etapa,
ISNULL(S.CveTipoTramite, 0) AS CveTipoTramite, T.TipoTramite,
D.CveTipoDocumento, COALESCE(NULLIF(TD.Descripcion, ''), TD.TipoDocumento) AS TipoDocumento,
D.NombreArchivo, D.NombreArchivoFisico, D.RutaArchivo, D.ContentType, D.TamanoBytes,
D.EsAprobado, D.ComentarioAdministrativo, D.CveUsuarioRevisa, D.FechaRevision,
A.EsAprobado AS EsAprobadoAnterior,
A.ComentarioAdministrativo AS ComentarioAdministrativoAnterior,
A.CveUsuarioRevisa AS CveUsuarioRevisaAnterior,
A.FechaRevision AS FechaRevisionAnterior, CONVERT(bit, 1) AS HuboCambio
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
INNER JOIN dbo.Tra_TiposDocumento AS TD ON TD.CveTipoDocumento = D.CveTipoDocumento
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud
LEFT JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = S.CveTipoTramite
INNER JOIN #Anterior AS A ON A.CveDocumentoSolicitud = D.CveDocumentoSolicitud
WHERE D.CveDocumentoSolicitud = @CveDocumentoSolicitud;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_DocumentoSolicitudReview'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Tramites_DocumentoSolicitudStageContextGet
@CveFraccionamientoEtapa int,
@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
DECLARE @CveFraccionamiento int;
SELECT @CveFraccionamiento = CveFraccionamiento
FROM dbo.FraccionamientosEtapas
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
EXEC dbo.PA_Tramites_DocumentoSolicitudUploadContextGet
@CveFraccionamiento = @CveFraccionamiento,
@CveFraccionamientoEtapa = @CveFraccionamientoEtapa,
@CveSolicitud = NULL,
@CveTipoDocumento = @CveTipoDocumento,
@CveUsuarioEjecuta = @CveUsuarioEjecuta,
@ErrorMostrar = @ErrorMostrar OUTPUT,
@ErrorTipo = @ErrorTipo OUTPUT,
@Return = @Return OUTPUT;
IF ISNULL(@Return, 0) = 0 RETURN;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tramites_DocumentoSolicitudStageContextGet'),
'; 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 = NULL,
@CveFraccionamientoEtapa 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
DECLARE @CveCliente int;
DECLARE @EsDesarrollador bit;
SELECT @CveCliente = F.CveCliente
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento;
SELECT @EsDesarrollador = CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = U.CveRol AND R.Activo = 1
WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1;
IF @CveCliente IS NULL OR @EsDesarrollador IS NULL OR
(
@EsDesarrollador = 1 AND NOT EXISTS
(
SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C ON C.CveCliente = UC.CveCliente AND C.Estatus = 1
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = @CveCliente AND UC.Activo = 1
)
)
BEGIN
SET @ErrorMostrar = 'No tiene acceso al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
SET @CveSolicitud = NULLIF(@CveSolicitud, 0);
IF @CveSolicitud IS NOT NULL
BEGIN
SELECT @CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
FROM dbo.Tra_Solicitudes AS S
WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento
AND (@CveFraccionamientoEtapa IS NULL OR S.CveFraccionamientoEtapa = @CveFraccionamientoEtapa);
IF NOT EXISTS
(
SELECT 1 FROM dbo.Tra_Solicitudes
WHERE CveSolicitud = @CveSolicitud AND CveFraccionamiento = @CveFraccionamiento
AND CveFraccionamientoEtapa = @CveFraccionamientoEtapa
)
BEGIN
SET @ErrorMostrar = 'La solicitud no pertenece a la etapa seleccionada.';
SET @ErrorTipo = 2;
RETURN;
END;
END;
IF NOT EXISTS
(
SELECT 1 FROM dbo.FraccionamientosEtapas
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'Seleccione una etapa del fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT
ISNULL(@CveSolicitud, 0) AS CveSolicitud, @CveCliente AS CveCliente,
E.CveFraccionamiento, E.CveFraccionamientoEtapa, E.Etapa, S.Folio, T.TipoTramite,
ISNULL(ES.EsFinal, CONVERT(bit, 0)) AS EsFinalSolicitud,
D.CveTipoDocumento, COALESCE(NULLIF(D.Descripcion, ''), D.TipoDocumento) AS 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.CveConfiguracionDocumento IS NULL THEN 0 ELSE 1 END) AS EsParticular,
CONVERT(bit, CASE WHEN P.CveConfiguracionDocumento IS NOT NULL
OR G.CveTipoDocumento IS NOT NULL THEN 1 ELSE 0 END) AS EsConfigurado
FROM dbo.FraccionamientosEtapas AS E
CROSS JOIN dbo.Tra_TiposDocumento AS D
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = @CveSolicitud
LEFT JOIN dbo.Tra_TiposTramite AS T ON T.CveTipoTramite = S.CveTipoTramite
LEFT JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud
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.CveFraccionamientoEtapa = E.CveFraccionamientoEtapa
AND ISNULL(P.CveSolicitud, 0) = ISNULL(@CveSolicitud, 0)
AND P.CveTipoDocumento = D.CveTipoDocumento
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND (D.EsActivo = 1 OR P.CveConfiguracionDocumento 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 = 'No fue posible procesar los documentos; contacte 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 = NULL,
@CveFraccionamientoEtapa int = NULL,
@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
DECLARE @CveCliente int;
DECLARE @EsDesarrollador bit;
SELECT @CveCliente = F.CveCliente
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento;
SELECT @EsDesarrollador = CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = U.CveRol AND R.Activo = 1
WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1;
IF @CveCliente IS NULL OR @EsDesarrollador IS NULL OR
(
@EsDesarrollador = 1 AND NOT EXISTS
(
SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C ON C.CveCliente = UC.CveCliente AND C.Estatus = 1
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = @CveCliente AND UC.Activo = 1
)
)
BEGIN
SET @ErrorMostrar = 'No tiene acceso al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @EsDesarrollador = 1
BEGIN
SET @ErrorMostrar = 'Sólo Agua de Hermosillo puede solicitar o modificar requisitos.';
SET @ErrorTipo = 2;
RETURN;
END;
SET @CveSolicitud = NULLIF(@CveSolicitud, 0);
IF @CveSolicitud IS NOT NULL
BEGIN
SELECT @CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
FROM dbo.Tra_Solicitudes AS S
WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento
AND (@CveFraccionamientoEtapa IS NULL OR S.CveFraccionamientoEtapa = @CveFraccionamientoEtapa);
IF NOT EXISTS
(
SELECT 1 FROM dbo.Tra_Solicitudes
WHERE CveSolicitud = @CveSolicitud AND CveFraccionamiento = @CveFraccionamiento
AND CveFraccionamientoEtapa = @CveFraccionamientoEtapa
)
BEGIN
SET @ErrorMostrar = 'La solicitud no pertenece a la etapa seleccionada.';
SET @ErrorTipo = 2;
RETURN;
END;
END;
IF NOT EXISTS
(
SELECT 1 FROM dbo.FraccionamientosEtapas
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'Seleccione una etapa del fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1 FROM dbo.Tra_SolicitudDocumentoConfiguracion WITH (UPDLOCK, HOLDLOCK)
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND ISNULL(CveSolicitud, 0) = ISNULL(@CveSolicitud, 0)
AND CveTipoDocumento = @CveTipoDocumento
)
BEGIN
UPDATE dbo.Tra_SolicitudDocumentoConfiguracion
SET EsRequerido = @EsRequerido,
EsCliente = @EsCliente,
TieneVigencia = @TieneVigencia,
EsActivo = @EsActivo
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND ISNULL(CveSolicitud, 0) = ISNULL(@CveSolicitud, 0)
AND CveTipoDocumento = @CveTipoDocumento;
END
ELSE
BEGIN
SELECT @Orden = ISNULL(MAX(Orden), 0) + 1
FROM dbo.Tra_SolicitudDocumentoConfiguracion WITH (UPDLOCK, HOLDLOCK)
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
INSERT INTO dbo.Tra_SolicitudDocumentoConfiguracion
(
CveFraccionamientoEtapa, CveSolicitud, CveTipoDocumento,
EsRequerido, EsCliente, TieneVigencia, Orden, EsActivo
)
VALUES
(
@CveFraccionamientoEtapa, @CveSolicitud, @CveTipoDocumento,
@EsRequerido, @EsCliente, @TieneVigencia, @Orden, @EsActivo
);
END;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte 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 = NULL,
@CveFraccionamientoEtapa int = NULL,
@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 @CveCliente int;
DECLARE @EsDesarrollador bit;
SELECT @CveCliente = F.CveCliente
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento;
SELECT @EsDesarrollador = CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R ON R.CveRol = U.CveRol AND R.Activo = 1
WHERE U.CveUsuario = @CveUsuarioEjecuta AND U.Activo = 1;
IF @CveCliente IS NULL OR @EsDesarrollador IS NULL OR
(
@EsDesarrollador = 1 AND NOT EXISTS
(
SELECT 1 FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C ON C.CveCliente = UC.CveCliente AND C.Estatus = 1
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = @CveCliente AND UC.Activo = 1
)
)
BEGIN
SET @ErrorMostrar = 'No tiene acceso al fraccionamiento seleccionado.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @EsDesarrollador = 1
BEGIN
SET @ErrorMostrar = 'Sólo Agua de Hermosillo puede solicitar o modificar requisitos.';
SET @ErrorTipo = 2;
RETURN;
END;
SET @CveSolicitud = NULLIF(@CveSolicitud, 0);
IF @CveSolicitud IS NOT NULL
BEGIN
SELECT @CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
FROM dbo.Tra_Solicitudes AS S
WHERE S.CveSolicitud = @CveSolicitud AND S.CveFraccionamiento = @CveFraccionamiento
AND (@CveFraccionamientoEtapa IS NULL OR S.CveFraccionamientoEtapa = @CveFraccionamientoEtapa);
IF NOT EXISTS
(
SELECT 1 FROM dbo.Tra_Solicitudes
WHERE CveSolicitud = @CveSolicitud AND CveFraccionamiento = @CveFraccionamiento
AND CveFraccionamientoEtapa = @CveFraccionamientoEtapa
)
BEGIN
SET @ErrorMostrar = 'La solicitud no pertenece a la etapa seleccionada.';
SET @ErrorTipo = 2;
RETURN;
END;
END;
IF NOT EXISTS
(
SELECT 1 FROM dbo.FraccionamientosEtapas
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'Seleccione una etapa del fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
DELETE FROM dbo.Tra_SolicitudDocumentoConfiguracion
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND ISNULL(CveSolicitud, 0) = ISNULL(@CveSolicitud, 0)
AND CveTipoDocumento = @CveTipoDocumento;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte 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
CREATE OR ALTER PROCEDURE dbo.PA_Tra_SolicitudProcesoActualizar
@CveSolicitud INT=NULL,
@CveFraccionamientoEtapa 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 @CveSolicitud IS NULL
AND @CveFraccionamientoEtapa IS NULL
BEGIN
SET @ErrorMostrar = 'Seleccione una solicitud o etapa para actualizar.';
SET @ErrorTipo = 2;
RETURN;
END
DECLARE @Hoy AS DATE = CONVERT (DATE, SYSDATETIMEOFFSET() AT TIME ZONE 'US Mountain Standard Time');
SELECT S.CveSolicitud,
S.CveTipoTramite,
S.CveFraccionamientoEtapa,
ES.Codigo AS CodigoEstatus,
ES.EsFinal
INTO #Solicitudes
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = S.CveEstatusSolicitud
WHERE (@CveSolicitud IS NULL
OR S.CveSolicitud = @CveSolicitud)
AND (@CveFraccionamientoEtapa IS NULL
OR S.CveFraccionamientoEtapa = @CveFraccionamientoEtapa);
CREATE UNIQUE CLUSTERED INDEX IX_Solicitudes
ON #Solicitudes(CveSolicitud);
SELECT S.CveSolicitud,
G.CveTipoDocumento,
G.EsRequerido,
G.EsCliente,
G.TieneVigencia,
G.EsActivo
INTO #Configuracion
FROM #Solicitudes 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.EsActivo
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS P
INNER JOIN #Solicitudes AS S ON S.CveSolicitud = P.CveSolicitud;
CREATE TABLE #Acciones (
CveSolicitud INT NOT NULL,
TipoAccion VARCHAR (30) COLLATE Modern_Spanish_CI_AS NOT NULL,
CveReferencia INT NOT NULL,
Descripcion NVARCHAR (1000) COLLATE Modern_Spanish_CS_AS NOT NULL,
VisibleCliente BIT NOT NULL,
Orden INT NOT NULL,
PRIMARY KEY (CveSolicitud, TipoAccion, CveReferencia)
);
INSERT INTO #Acciones (CveSolicitud, TipoAccion, CveReferencia, Descripcion, VisibleCliente, Orden)
SELECT C.CveSolicitud,
'DocumentoFaltante',
C.CveTipoDocumento,
CONCAT(N'Cargar documento: ', COALESCE (NULLIF (T.Descripcion, ''), T.TipoDocumento)),
C.EsCliente,
10
FROM #Configuracion AS C
INNER JOIN #Solicitudes AS S ON S.CveSolicitud = C.CveSolicitud
INNER JOIN dbo.Tra_TiposDocumento AS T ON T.CveTipoDocumento = C.CveTipoDocumento
WHERE C.EsActivo = 1
AND S.EsFinal = 0
AND C.EsRequerido = 1
AND T.EsActivo = 1
AND NOT EXISTS (SELECT 1
FROM dbo.Tra_DocumentosSolicitud AS D
WHERE D.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
AND D.CveTipoDocumento = C.CveTipoDocumento
AND D.EsActivo = 1
AND NULLIF (LTRIM(RTRIM(D.NombreArchivo)), '') IS NOT NULL
AND NULLIF (LTRIM(RTRIM(D.RutaArchivo)), '') IS NOT NULL);
INSERT INTO #Acciones (CveSolicitud, TipoAccion, CveReferencia, Descripcion, VisibleCliente, Orden)
SELECT S.CveSolicitud,
'DocumentoRechazado',
D.CveDocumentoSolicitud,
CONCAT(N'Corregir documento no autorizado: ', COALESCE (NULLIF (T.Descripcion, ''), T.TipoDocumento)),
ISNULL(C.EsCliente, 0),
20
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN #Solicitudes AS S ON S.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
INNER JOIN dbo.Tra_TiposDocumento AS T ON T.CveTipoDocumento = D.CveTipoDocumento
LEFT OUTER JOIN #Configuracion AS C ON C.CveSolicitud = S.CveSolicitud
AND C.CveTipoDocumento = D.CveTipoDocumento
WHERE D.EsActivo = 1
AND D.EsAprobado = 0
AND C.EsActivo = 1
AND S.EsFinal = 0;
INSERT INTO #Acciones (CveSolicitud, TipoAccion, CveReferencia, Descripcion, VisibleCliente, Orden)
SELECT S.CveSolicitud,
'DocumentoVencido',
D.CveDocumentoSolicitud,
CONCAT(N'Renovar documento vencido: ', COALESCE (NULLIF (T.Descripcion, ''), T.TipoDocumento), N' (', CONVERT (CHAR (10), D.FechaVencimiento, 103), N')'),
ISNULL(C.EsCliente, 0),
30
FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN #Solicitudes AS S ON S.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
INNER JOIN dbo.Tra_TiposDocumento AS T ON T.CveTipoDocumento = D.CveTipoDocumento
LEFT OUTER JOIN #Configuracion AS C ON C.CveSolicitud = S.CveSolicitud
AND C.CveTipoDocumento = D.CveTipoDocumento
WHERE D.EsActivo = 1
AND D.FechaVencimiento < @Hoy
AND S.EsFinal = 0
AND C.EsActivo = 1
AND C.EsRequerido = 1;
WITH Aplicaciones
AS (SELECT A.CveSolicitudPago,
SUM(A.ImporteAplicado) AS Abonado
FROM dbo.Tra_PagosAplicaciones AS A
INNER JOIN dbo.Tra_Pagos AS P ON P.CvePago = A.CvePago
WHERE P.EsActivo = 1
AND P.Autorizado = 1
GROUP BY A.CveSolicitudPago),
Traslados
AS (SELECT O.CveSolicitudPagoOrigen,
SUM(O.ImporteTomadoConvenio) AS Convenido
FROM dbo.Tra_SolicitudesPagoConvenioOrigen AS O
INNER JOIN dbo.Tra_SolicitudesPago AS C ON C.CveSolicitudPago = O.CveSolicitudPagoConvenio
WHERE C.EstadoAdministrativo <> 'CANCELADO'
GROUP BY O.CveSolicitudPagoOrigen),
Saldos
AS (SELECT S.*,
ISNULL(A.Abonado, 0) AS ImporteAbonado,
ISNULL(T.Convenido, 0) AS ImporteConvenido,
S.Importe - ISNULL(A.Abonado, 0) - ISNULL(T.Convenido, 0) AS SaldoPendiente
FROM dbo.Tra_SolicitudesPago AS S
LEFT OUTER JOIN Aplicaciones AS A ON A.CveSolicitudPago = S.CveSolicitudPago
LEFT OUTER JOIN Traslados AS T ON T.CveSolicitudPagoOrigen = S.CveSolicitudPago)
INSERT INTO #Acciones (CveSolicitud, TipoAccion, CveReferencia, Descripcion, VisibleCliente, Orden)
SELECT DISTINCT R.CveSolicitud,
'PagoPendiente',
S.CveSolicitudPago,
CONCAT(N'Pagar saldo: ', S.Descripcion),
1,
40
FROM Saldos AS S
INNER JOIN #Solicitudes AS R ON R.CveSolicitud = S.CveSolicitud
OR EXISTS (SELECT 1
FROM dbo.Tra_SolicitudesPagoConvenioOrigen AS O
INNER JOIN dbo.Tra_SolicitudesPago AS P ON P.CveSolicitudPago = O.CveSolicitudPagoOrigen
WHERE O.CveSolicitudPagoConvenio = S.CveSolicitudPago
AND P.CveSolicitud = R.CveSolicitud)
WHERE S.EstadoAdministrativo = 'ACTIVO'
AND S.EsRequerido = 1
AND S.SaldoPendiente > 0;
DECLARE @SolicitudCondicion AS INT;
DECLARE @TipoTramite AS INT;
DECLARE @Etapa AS INT;
DECLARE @Condiciones TABLE (
CveCondicionMostrar INT,
CondicionMostrar VARCHAR (100));
DECLARE @Correcto AS BIT;
DECLARE @TipoError AS INT;
DECLARE @Mensaje AS VARCHAR (MAX);
DECLARE condiciones CURSOR LOCAL FAST_FORWARD
FOR SELECT CveSolicitud,
CveTipoTramite,
CveFraccionamientoEtapa
FROM #Solicitudes
ORDER BY CveSolicitud;
OPEN condiciones;
FETCH NEXT FROM condiciones INTO @SolicitudCondicion, @TipoTramite, @Etapa;
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE @Condiciones;
INSERT INTO @Condiciones
EXECUTE dbo.PA_Tra_MostrarCondicionesporTramite
@CveTipoTramite = @TipoTramite,
@CveFraccionamientoEtapa = @Etapa,
@CveUsuarioEjecuta = @CveUsuarioEjecuta,
@ErrorMostrar = @Mensaje OUTPUT,
@ErrorTipo = @TipoError OUTPUT,
@Return = @Correcto OUTPUT;
IF ISNULL(@Correcto, 0) = 0
BEGIN
SET @ErrorMostrar = @Mensaje;
SET @ErrorTipo = ISNULL(NULLIF (@TipoError, 0), 1);
CLOSE condiciones;
DEALLOCATE condiciones;
RETURN;
END
INSERT INTO #Acciones (CveSolicitud, TipoAccion, CveReferencia, Descripcion, VisibleCliente, Orden)
SELECT @SolicitudCondicion,
'CondicionPendiente',
C.CveCondicionMostrar,
CONCAT(N'Capturar condición: ', C.CondicionMostrar),
0,
50
FROM @Condiciones AS C
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = @Etapa
WHERE CASE C.CveCondicionMostrar
WHEN 1 THEN E.Aprobado_Prefactibilidad
WHEN 2 THEN E.RequiereObrasExternas
WHEN 3 THEN E.TipoDeObra
WHEN 4 THEN E.LiberacionMacromedidor
WHEN 5 THEN E.Relotificacion
WHEN 6 THEN E.LiberacionDeLotes
WHEN 7 THEN E.LiberacionDePagosDeDerechos
END IS NULL;
FETCH NEXT FROM condiciones INTO @SolicitudCondicion, @TipoTramite, @Etapa;
END
CLOSE condiciones;
DEALLOCATE condiciones;
UPDATE S
SET EstatusProceso =
CASE
WHEN B.CodigoEstatus = 'Autorizado' THEN 4
WHEN EXISTS
(
SELECT 1 FROM #Acciones AS A
WHERE A.CveSolicitud = S.CveSolicitud AND A.TipoAccion = 'DocumentoRechazado'
) THEN 2
WHEN EXISTS
(
SELECT 1 FROM #Acciones AS A
WHERE A.CveSolicitud = S.CveSolicitud
AND A.TipoAccion IN ('DocumentoFaltante', 'DocumentoVencido')
) THEN 1
WHEN B.CodigoEstatus = 'Revisando' THEN 3
WHEN B.CodigoEstatus <> 'Sin Procesar'
OR EXISTS
(
SELECT 1 FROM dbo.Tra_DocumentosSolicitud AS D
INNER JOIN #Configuracion AS C ON C.CveSolicitud = S.CveSolicitud
AND C.CveTipoDocumento = D.CveTipoDocumento AND C.EsActivo = 1
WHERE D.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa AND D.EsActivo = 1
)
OR EXISTS
(
SELECT 1 FROM dbo.Tra_ComentariosSolicitud AS C
WHERE C.CveSolicitud = S.CveSolicitud
) THEN 1
ELSE 0
END
FROM dbo.Tra_Solicitudes AS S
INNER JOIN #Solicitudes AS B ON B.CveSolicitud = S.CveSolicitud;
DELETE A
FROM #Acciones AS A
INNER JOIN #Solicitudes AS S ON S.CveSolicitud = A.CveSolicitud
WHERE S.CodigoEstatus IN ('Autorizado', 'Cancelado');
DELETE A
FROM dbo.Tra_SolicitudesAccionesPendientes AS A
INNER JOIN #Solicitudes AS S ON S.CveSolicitud = A.CveSolicitud
WHERE NOT EXISTS (SELECT 1
FROM #Acciones AS N
WHERE N.CveSolicitud = A.CveSolicitud
AND N.TipoAccion = A.TipoAccion
AND N.CveReferencia = A.CveReferencia);
UPDATE A
SET Descripcion = N.Descripcion,
VisibleCliente = N.VisibleCliente,
Orden = N.Orden
FROM dbo.Tra_SolicitudesAccionesPendientes AS A
INNER JOIN #Acciones AS N ON N.CveSolicitud = A.CveSolicitud
AND N.TipoAccion = A.TipoAccion
AND N.CveReferencia = A.CveReferencia;
INSERT INTO dbo.Tra_SolicitudesAccionesPendientes (CveSolicitud, TipoAccion, CveReferencia, Descripcion, VisibleCliente, Orden)
SELECT N.CveSolicitud,
N.TipoAccion,
N.CveReferencia,
N.Descripcion,
N.VisibleCliente,
N.Orden
FROM #Acciones AS N
WHERE NOT EXISTS (SELECT 1
FROM dbo.Tra_SolicitudesAccionesPendientes AS A
WHERE A.CveSolicitud = N.CveSolicitud
AND A.TipoAccion = N.TipoAccion
AND A.CveReferencia = N.CveReferencia);
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT @ErrorMostrar = 'No fue posible actualizar o consultar el seguimiento de solicitudes; contacte a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico AS NVARCHAR (2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE (ERROR_PROCEDURE(), 'PA_Tra_SolicitudProcesoActualizar'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
RAISERROR (N'%s', 10, 1, @ErrorTecnico);
END CATCH
END
GO
CREATE OR ALTER PROCEDURE dbo.PA_Job_VerificaVigencias
@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
-- Job_VerificaVigencias: diario a las 03:00, America/Hermosillo.
-- No se llama desde pantallas. No modifica supervisiones.
EXEC dbo.PA_Tramites_DocumentoEtapaVencimientoActualizar
@CveFraccionamientoEtapa = NULL,
@CveUsuarioEjecuta = @CveUsuarioEjecuta,
@ErrorMostrar = @ErrorMostrar OUTPUT,
@ErrorTipo = @ErrorTipo OUTPUT,
@Return = @Return OUTPUT;
IF ISNULL(@Return, 0) = 0 RETURN;
DECLARE @Etapa int;
DECLARE etapas CURSOR LOCAL FAST_FORWARD FOR
SELECT DISTINCT CveFraccionamientoEtapa FROM dbo.Tra_DocumentosSolicitud
WHERE EsActivo = 1
AND FechaVencimiento < CONVERT(date, SYSDATETIMEOFFSET() AT TIME ZONE 'US Mountain Standard Time');
OPEN etapas;
FETCH NEXT FROM etapas INTO @Etapa;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC dbo.PA_Tra_SolicitudProcesoActualizar
@CveFraccionamientoEtapa = @Etapa,
@CveUsuarioEjecuta = @CveUsuarioEjecuta,
@ErrorMostrar = @ErrorMostrar OUTPUT,
@ErrorTipo = @ErrorTipo OUTPUT,
@Return = @Return OUTPUT;
IF ISNULL(@Return, 0) = 0
BEGIN
CLOSE etapas;
DEALLOCATE etapas;
RETURN;
END;
FETCH NEXT FROM etapas INTO @Etapa;
END;
CLOSE etapas;
DEALLOCATE etapas;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'No fue posible procesar los documentos; contacte a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Job_VerificaVigencias'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO