309 lines
9.9 KiB
Transact-SQL
309 lines
9.9 KiB
Transact-SQL
/*
|
|
Tablero de trámites. Ejecutar en la base configurada para la aplicación
|
|
únicamente después de autorizar su instalación.
|
|
|
|
Crea o actualiza solamente:
|
|
dbo.PA_Tra_ReporteTramitesList
|
|
dbo.PA_Tra_SolicitudHistorialEstatusList
|
|
|
|
No cambia tablas, permisos, catálogos ni solicitudes existentes.
|
|
Los valores 1 y 2 de @CveAgrupacion son opciones del reporte:
|
|
1 = Por trámite; 2 = Por cliente.
|
|
No son claves nuevas de un catálogo de la base de datos.
|
|
|
|
PENDIENTE: bloqueo a nivel Clientes y tabla de cambios con comentarios.
|
|
@SoloBloqueados se recibe, pero aún no restringe los resultados.
|
|
*/
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ReporteTramitesList
|
|
@CveUsuarioEjecuta int,
|
|
@CveAgrupacion tinyint = 1,
|
|
@CveFraccionamiento int = NULL,
|
|
@SoloActivos bit = 1,
|
|
@SoloBloqueados bit = 0,
|
|
@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 @TieneAccesoGlobal bit = 0;
|
|
|
|
-- Misma regla de acceso que PA_Tramites_SolicitudGet/List.
|
|
SELECT
|
|
@CveRol = U.CveRol,
|
|
@TieneAccesoGlobal = 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;
|
|
|
|
IF @CveAgrupacion IS NULL OR @CveAgrupacion NOT IN (1, 2)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'Seleccione una agrupación válida.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
-- Empresa es el rol cliente actual (UserSessionModel.EsDesarrollador).
|
|
IF @CveRol = 3
|
|
BEGIN
|
|
IF @CveAgrupacion <> 1
|
|
BEGIN
|
|
SET @ErrorMostrar = 'La agrupación seleccionada no está disponible para el usuario.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SET @SoloBloqueados = 0;
|
|
END;
|
|
|
|
SELECT
|
|
F.CveFraccionamiento,
|
|
F.Fraccionamiento
|
|
INTO #FraccionamientosAutorizados
|
|
FROM dbo.Fraccionamientos AS F
|
|
WHERE @TieneAccesoGlobal = 1
|
|
OR EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Sis_UsuariosClientes AS UC
|
|
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
|
AND UC.CveCliente = F.CveCliente
|
|
AND UC.Activo = 1
|
|
);
|
|
|
|
IF @CveFraccionamiento IS NOT NULL
|
|
AND NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM #FraccionamientosAutorizados AS F
|
|
WHERE F.CveFraccionamiento = @CveFraccionamiento
|
|
)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El fraccionamiento no existe o no está asignado al usuario.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SELECT
|
|
S.CveSolicitud,
|
|
S.CveTipoTramite,
|
|
S.CveFraccionamiento,
|
|
S.CveFraccionamientoEtapa,
|
|
S.CveCliente,
|
|
CASE @CveAgrupacion
|
|
WHEN 1 THEN S.CveTipoTramite
|
|
WHEN 2 THEN S.CveCliente
|
|
END AS CveAgrupacion,
|
|
CASE @CveAgrupacion
|
|
WHEN 1 THEN TT.TipoTramite
|
|
WHEN 2 THEN C.Nombre
|
|
END AS Agrupacion,
|
|
C.Nombre AS Cliente,
|
|
TT.TipoTramite AS Tramite,
|
|
F.Fraccionamiento,
|
|
CASE
|
|
WHEN @TieneAccesoGlobal = 1 OR ES.EsCliente = 1
|
|
THEN ES.EstatusSolicitud
|
|
ELSE NULL
|
|
END AS Estatus,
|
|
S.FechaInicio
|
|
INTO #SolicitudesTablero
|
|
FROM dbo.Tra_Solicitudes AS S
|
|
INNER JOIN #FraccionamientosAutorizados AS F ON F.CveFraccionamiento = S.CveFraccionamiento
|
|
INNER JOIN dbo.Clientes AS C ON C.CveCliente = S.CveCliente
|
|
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 (@CveFraccionamiento IS NULL OR S.CveFraccionamiento = @CveFraccionamiento)
|
|
AND (@SoloActivos = 0 OR TT.EsActivo = 1)
|
|
AND
|
|
(
|
|
@TieneAccesoGlobal = 1
|
|
OR EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Sis_UsuariosClientes AS UC
|
|
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
|
AND UC.CveCliente = S.CveCliente
|
|
AND UC.Activo = 1
|
|
)
|
|
)
|
|
-- PENDIENTE: agregar el campo de bloqueo en Clientes y su historial.
|
|
-- Condición conceptual pendiente (no existe aún el campo):
|
|
-- AND (@SoloBloqueados = 0 OR <campo de bloqueo de C> = 1)
|
|
;
|
|
|
|
-- El grid consume este contrato estable sin conocer la agrupación elegida.
|
|
SELECT
|
|
CAST(NULL AS int) AS CveSolicitud,
|
|
CAST(NULL AS int) AS CveTipoTramite,
|
|
CAST(NULL AS int) AS CveFraccionamiento,
|
|
CAST(NULL AS int) AS CveFraccionamientoEtapa,
|
|
CAST(NULL AS int) AS CveCliente,
|
|
CveAgrupacion,
|
|
Agrupacion,
|
|
2 AS Nivel,
|
|
CAST(NULL AS varchar(200)) AS Cliente,
|
|
CAST(NULL AS varchar(200)) AS Tramite,
|
|
CAST(NULL AS varchar(200)) AS Fraccionamiento,
|
|
CAST(NULL AS varchar(200)) AS Estatus,
|
|
CAST(NULL AS datetime) AS FechaInicio
|
|
FROM #SolicitudesTablero
|
|
GROUP BY CveAgrupacion, Agrupacion
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
CveSolicitud,
|
|
CveTipoTramite,
|
|
CveFraccionamiento,
|
|
CveFraccionamientoEtapa,
|
|
CveCliente,
|
|
CveAgrupacion,
|
|
Agrupacion,
|
|
1 AS Nivel,
|
|
Cliente,
|
|
Tramite,
|
|
Fraccionamiento,
|
|
Estatus,
|
|
FechaInicio
|
|
FROM #SolicitudesTablero
|
|
ORDER BY CveAgrupacion, Nivel DESC, FechaInicio DESC, CveSolicitud DESC;
|
|
|
|
-- Segundo resultado: combo con el mismo alcance de acceso del tablero.
|
|
-- No depende del filtro seleccionado ni del estado activo del tipo.
|
|
SELECT CveFraccionamiento, Fraccionamiento
|
|
FROM #FraccionamientosAutorizados
|
|
ORDER BY Fraccionamiento, CveFraccionamiento;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar el tablero de trámites; 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_ReporteTramitesList'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE()
|
|
);
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Tra_SolicitudHistorialEstatusList
|
|
@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
|
|
DECLARE @CveRol int;
|
|
DECLARE @TieneAccesoGlobal bit = 0;
|
|
|
|
SELECT
|
|
@CveRol = U.CveRol,
|
|
@TieneAccesoGlobal = 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;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_Solicitudes AS S
|
|
WHERE S.CveSolicitud = @CveSolicitud
|
|
AND
|
|
(
|
|
@TieneAccesoGlobal = 1
|
|
OR EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Sis_UsuariosClientes AS UC
|
|
WHERE UC.CveUsuario = @CveUsuarioEjecuta
|
|
AND UC.CveCliente = S.CveCliente
|
|
AND UC.Activo = 1
|
|
)
|
|
)
|
|
)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'La solicitud no existe o no está asignada al usuario.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SELECT
|
|
H.CveHistorialEstatusSolicitud,
|
|
H.CveSolicitud,
|
|
ES.EstatusSolicitud AS Estatus,
|
|
H.FechaAlta AS FechaCambio,
|
|
H.Comentarios
|
|
FROM dbo.Tra_HistorialEstatusSolicitud AS H
|
|
INNER JOIN dbo.Tra_EstatusSolicitud AS ES ON ES.CveEstatusSolicitud = H.CveEstatusSolicitud
|
|
LEFT JOIN dbo.Tra_EstatusSolicitud AS EA ON EA.CveEstatusSolicitud = H.CveEstatusSolicitudAnterior
|
|
WHERE H.CveSolicitud = @CveSolicitud
|
|
AND
|
|
(
|
|
@TieneAccesoGlobal = 1
|
|
OR
|
|
(
|
|
ES.EsCliente = 1
|
|
AND (H.CveEstatusSolicitudAnterior IS NULL OR EA.EsCliente = 1)
|
|
)
|
|
)
|
|
ORDER BY H.FechaAlta DESC, H.CveHistorialEstatusSolicitud DESC;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar el historial de estatus; 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_SolicitudHistorialEstatusList'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE()
|
|
);
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|