Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
3| Name | Data Type | Length | Description |
|---|---|---|---|
| @cliente | int | 4 | |
| @servicio_contratado | int | 4 | |
| @accion | varchar | 50 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
exec [visibilidad_usuarios] 861672084, 47, 'familias'
exec [visibilidad_usuarios] 861672084, 47, 'indicadores'
*/
CREATE OR ALTER PROCEDURE dbo.visibilidad_usuarios
@cliente int = 861672084,
@servicio_contratado int = 47,
@accion varchar(50) = 'familias'
AS
BEGIN
SET NOCOUNT ON;
declare @familia int
declare @user_id int
declare @permisos_familias table (familia int, user_id int, si_no char(2))
declare @producto int
declare @indicador int
declare @orden int
declare @permisos_indicadores table (orden int, producto int, indicador int, user_id int, si_no char(2))
DECLARE C_Cursor_USU CURSOR
FOR
select distinct users.user_id
from usuarios_productos
left join users
on users.user_id = usuarios_productos.user_id
where usuarios_productos.cliente = @cliente
and users.active_user = 'Y'
and usuarios_productos.activo = 1
and usuarios_productos.id_producto = @servicio_contratado
if (@accion = 'familias')
begin
DECLARE C_Cursor_FAM CURSOR
FOR
select familia
from ln_familias
where cliente = @cliente
and visible = 1
and subfamilia = 0
and servicio_contratado = @servicio_contratado
OPEN C_Cursor_FAM
FETCH next from C_Cursor_FAM INTO @familia
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
OPEN C_Cursor_USU
FETCH next from C_Cursor_USU INTO @user_id
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
IF (select COUNT(*)
from usuarios_restricciones
where usuarios_restricciones.cliente = @cliente
and usuarios_restricciones.user_id = @user_id
and usuarios_restricciones.servicio_contratado = @servicio_contratado
and indicador is null
and familia = @familia) = 0 -- No tiene restricciones, entonces, tiene permiso
insert into @permisos_familias values (@familia, @user_id, 'SI')
else
insert into @permisos_familias values (@familia, @user_id, 'NO')
FETCH next from C_Cursor_USU INTO @user_id
END
CLOSE C_Cursor_USU
FETCH next from C_Cursor_FAM INTO @familia
END
CLOSE C_Cursor_FAM
DEALLOCATE C_Cursor_FAM
DEALLOCATE C_Cursor_USU
SELECT ltrim(rtrim(isnull(users.last_name,'') + ' ' + isnull(users.first_name, ''))) as Nombre,
lower(users.username) as username, lower(users.email) as Email,
ln_familias.nombre_familia as Familia,
si_no as Permiso
from @permisos_familias permisos
inner join ln_familias on ln_familias.familia = permisos.familia
inner join users on users.user_id = permisos.user_id
order by nombre, username, ln_familias.nombre_familia
end
if (@accion = 'indicadores')
begin
DECLARE C_Cursor_IND CURSOR
FOR
select distinct P.producto, I.indicador, CP.orden_producto
from LN_cliente_productos CP
inner join LN_indicadores I on I.producto = CP.producto
inner join LN_familias F on (F.cliente = CP.cliente and F.visible = 1)
inner join LN_familia_productos FP on (FP.producto = CP.producto and FP.activo = 1 and FP.familia = F.familia)
inner join LN_productos P on P.producto = CP.producto
LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
WHERE cliente = @cliente) SUSC
ON (CP.cliente = SUSC.cliente AND I.indicador = SUSC.indicador)
where CP.cliente = @cliente
and CP.activo = 1
and (P.suscribe_indicadores = 0 or SUSC.indicador IS NOT NULL)
and P.servicio_contratado in (@servicio_contratado,0)
order by CP.orden_producto
OPEN C_Cursor_IND
FETCH next from C_Cursor_IND INTO @producto, @indicador, @orden
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
OPEN C_Cursor_USU
FETCH next from C_Cursor_USU INTO @user_id
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
IF (select COUNT(*)
from usuarios_restricciones
where usuarios_restricciones.cliente = @cliente
and usuarios_restricciones.user_id = @user_id
and usuarios_restricciones.servicio_contratado = @servicio_contratado
and indicador = @indicador) = 0
-- No tiene restricciones, entonces, tiene permiso
insert into @permisos_indicadores values (@orden, @producto, @indicador, @user_id, 'SI')
else
insert into @permisos_indicadores values (@orden, @producto, @indicador, @user_id, 'NO')
FETCH next from C_Cursor_USU INTO @user_id
END
CLOSE C_Cursor_USU
FETCH next from C_Cursor_IND INTO @producto, @indicador, @orden
END
CLOSE C_Cursor_IND
DEALLOCATE C_Cursor_IND
DEALLOCATE C_Cursor_USU
SELECT ltrim(rtrim(isnull(users.last_name,'') + ' ' + isnull(users.first_name, ''))) as Nombre,
lower(users.username) as Username, lower(users.email) as Email,
permisos.orden, dbo.InitCap(ln_productos.nombre_producto) as Producto, dbo.InitCap(ln_indicadores.etiqueta) +
iif(ln_indicadores.visible=0,' (no se muestra en el panel)','') as 'Indicador',
si_no as Permiso
from @permisos_indicadores permisos
inner join ln_productos on ln_productos.producto = permisos.producto
inner join ln_indicadores on ln_indicadores.indicador = permisos.indicador
inner join users on users.user_id = permisos.user_id
order by nombre, username, orden, Indicador
end
END
GO
GO
/*
exec [visibilidad_usuarios] 861672084, 47, 'familias'
exec [visibilidad_usuarios] 861672084, 47, 'indicadores'
*/
CREATE OR ALTER PROCEDURE dbo.visibilidad_usuarios
@cliente int = 861672084,
@servicio_contratado int = 47,
@accion varchar(50) = 'familias'
AS
BEGIN
SET NOCOUNT ON;
declare @familia int
declare @user_id int
declare @permisos_familias table (familia int, user_id int, si_no char(2))
declare @producto int
declare @indicador int
declare @orden int
declare @permisos_indicadores table (orden int, producto int, indicador int, user_id int, si_no char(2))
DECLARE C_Cursor_USU CURSOR
FOR
select distinct users.user_id
from usuarios_productos
left join users
on users.user_id = usuarios_productos.user_id
where usuarios_productos.cliente = @cliente
and users.active_user = 'Y'
and usuarios_productos.activo = 1
and usuarios_productos.id_producto = @servicio_contratado
if (@accion = 'familias')
begin
DECLARE C_Cursor_FAM CURSOR
FOR
select familia
from ln_familias
where cliente = @cliente
and visible = 1
and subfamilia = 0
and servicio_contratado = @servicio_contratado
OPEN C_Cursor_FAM
FETCH next from C_Cursor_FAM INTO @familia
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
OPEN C_Cursor_USU
FETCH next from C_Cursor_USU INTO @user_id
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
IF (select COUNT(*)
from usuarios_restricciones
where usuarios_restricciones.cliente = @cliente
and usuarios_restricciones.user_id = @user_id
and usuarios_restricciones.servicio_contratado = @servicio_contratado
and indicador is null
and familia = @familia) = 0 -- No tiene restricciones, entonces, tiene permiso
insert into @permisos_familias values (@familia, @user_id, 'SI')
else
insert into @permisos_familias values (@familia, @user_id, 'NO')
FETCH next from C_Cursor_USU INTO @user_id
END
CLOSE C_Cursor_USU
FETCH next from C_Cursor_FAM INTO @familia
END
CLOSE C_Cursor_FAM
DEALLOCATE C_Cursor_FAM
DEALLOCATE C_Cursor_USU
SELECT ltrim(rtrim(isnull(users.last_name,'') + ' ' + isnull(users.first_name, ''))) as Nombre,
lower(users.username) as username, lower(users.email) as Email,
ln_familias.nombre_familia as Familia,
si_no as Permiso
from @permisos_familias permisos
inner join ln_familias on ln_familias.familia = permisos.familia
inner join users on users.user_id = permisos.user_id
order by nombre, username, ln_familias.nombre_familia
end
if (@accion = 'indicadores')
begin
DECLARE C_Cursor_IND CURSOR
FOR
select distinct P.producto, I.indicador, CP.orden_producto
from LN_cliente_productos CP
inner join LN_indicadores I on I.producto = CP.producto
inner join LN_familias F on (F.cliente = CP.cliente and F.visible = 1)
inner join LN_familia_productos FP on (FP.producto = CP.producto and FP.activo = 1 and FP.familia = F.familia)
inner join LN_productos P on P.producto = CP.producto
LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
WHERE cliente = @cliente) SUSC
ON (CP.cliente = SUSC.cliente AND I.indicador = SUSC.indicador)
where CP.cliente = @cliente
and CP.activo = 1
and (P.suscribe_indicadores = 0 or SUSC.indicador IS NOT NULL)
and P.servicio_contratado in (@servicio_contratado,0)
order by CP.orden_producto
OPEN C_Cursor_IND
FETCH next from C_Cursor_IND INTO @producto, @indicador, @orden
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
OPEN C_Cursor_USU
FETCH next from C_Cursor_USU INTO @user_id
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
IF (select COUNT(*)
from usuarios_restricciones
where usuarios_restricciones.cliente = @cliente
and usuarios_restricciones.user_id = @user_id
and usuarios_restricciones.servicio_contratado = @servicio_contratado
and indicador = @indicador) = 0
-- No tiene restricciones, entonces, tiene permiso
insert into @permisos_indicadores values (@orden, @producto, @indicador, @user_id, 'SI')
else
insert into @permisos_indicadores values (@orden, @producto, @indicador, @user_id, 'NO')
FETCH next from C_Cursor_USU INTO @user_id
END
CLOSE C_Cursor_USU
FETCH next from C_Cursor_IND INTO @producto, @indicador, @orden
END
CLOSE C_Cursor_IND
DEALLOCATE C_Cursor_IND
DEALLOCATE C_Cursor_USU
SELECT ltrim(rtrim(isnull(users.last_name,'') + ' ' + isnull(users.first_name, ''))) as Nombre,
lower(users.username) as Username, lower(users.email) as Email,
permisos.orden, dbo.InitCap(ln_productos.nombre_producto) as Producto, dbo.InitCap(ln_indicadores.etiqueta) +
iif(ln_indicadores.visible=0,' (no se muestra en el panel)','') as 'Indicador',
si_no as Permiso
from @permisos_indicadores permisos
inner join ln_productos on ln_productos.producto = permisos.producto
inner join ln_indicadores on ln_indicadores.indicador = permisos.indicador
inner join users on users.user_id = permisos.user_id
order by nombre, username, orden, Indicador
end
END
GO
Depends On
10Used By
No items found