dbo.visibilidad_usuarios

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

Used By

No items found