dbo.usuarios_restricciones_

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

6
Name Data Type Length Description
@accion varchar 50
@p_cliente int 4
@p_user_id int 4
@p_servicio int 4
@p_pais varchar 10
@p_created_by int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: Marita Soria
-- Create date: 00/06/2020
-- Description: <Description,,>
-- =============================================
/*
exec usuarios_restricciones_ 'indicadores',5546348
exec usuarios_restricciones_ 'indicadoresxservicio',5546348,null,73

indicadoresxservicio
usuarios_restricciones_ 'paises_restringidos',5546348,852844375,47
 backend_cliente_paises 'obtener_cliente_paises',5546348
 select * from usuarios_restricciones
usuarios_restricciones_ 'usuario',null, 38554657
backend_usuarios_productos 5546348

select * from users where username = 'lsarmiento@arcor.com'
select * from clientes where cli_codigo = 9125

*/

CREATE OR ALTER PROCEDURE dbo.usuarios_restricciones_ 
 -- Add the parameters for the stored procedure here

 @accion            varchar(50) = NULL,
 @p_cliente           int = NULL,
 @p_user_id           int = NULL,
 @p_servicio           int = NULL,
 @p_pais            varchar(10) = NULL,
 @p_created_by          int = NULL

AS
BEGIN
 SET NOCOUNT ON;
 DECLARE @cliente int = null

 --indicadoresxservicio


 if (@p_servicio is null)
 begin
  set @p_servicio=0
 end
 
 -- consulta para todos los usuarios del cliente 
 if (@accion = 'cliente') begin

  if (@p_cliente is not null)
  /*
   select distinct users.user_id, users.first_name, users.last_name, users.email, users.username
   from users
   inner join clientes_usuarios on users.user_id = clientes_usuarios.user_id
   where clientes_usuarios.cliente = @p_cliente
   and users.active_user = 'Y'
   and exists (
    select * from usuarios_productos 
    inner join productos on productos.producto = usuarios_productos.id_producto 
    where usuarios_productos.user_id = users.user_id
    --and productos.grupo_informes in ('LED NUEVO','IMPERIUM','INQUIRO VITAE'))
      and productos.producto in (10,47,73))
  
   union 
   select distinct users.user_id, users.first_name, users.last_name, users.email, users.username
   from users
   where users.cli_codigo = (select cli_codigo from clientes where cliente = @p_cliente)
   and users.active_user = 'Y'
   and exists (
    select * from usuarios_productos 
    inner join productos on productos.producto = usuarios_productos.id_producto 
    where usuarios_productos.user_id = users.user_id
    --and productos.grupo_informes in ('LED NUEVO','IMPERIUM','INQUIRO VITAE'))
    and productos.producto in (10,47,73))
  
  
   order by users.first_name, users.last_name
   */


  select distinct users.user_id, users.first_name, users.last_name, users.email, users.username, users.password as password
  from usuarios_productos
  inner join users
    on users.user_id = usuarios_productos.user_id
  where usuarios_productos.cliente  = @p_Cliente
  and isnull(users.active_user,'Y') = 'Y'
  and 
  (
  (@p_servicio=0 and usuarios_productos.id_producto in (10,47,73))
  or
  (@p_servicio!=0 and usuarios_productos.id_producto = @p_servicio)
  )
 end
 
 
 if (@accion = 'usuario') begin

 select distinct users.user_id, isnull(users.first_name,'') as first_name, 
     isnull(users.last_name,'') as last_name, 
        users.email, users.username, 
     isnull(users.password,'') as password
  from users
  where  users.user_id = @p_user_id
 end



 -- consulta para todos los sericios contratados del cliente (que sea LED - IMPERIUM - INQUIRO) 
 if (@accion = 'servicios') begin
  if (@p_cliente is not null)
   select productos.producto, upper(productos.nombre_producto) as nombre_producto
     from clientes_productos 
    inner join productos on productos.producto = clientes_productos.id_producto
     where clientes_productos.cliente = @p_cliente
      --and productos.grupo_informes in ('LED NUEVO','IMPERIUM','INQUIRO VITAE')
      and productos.producto in (10,47,73)
      and clientes_productos.activo = 1
      order by nombre_producto
 end

 
 if (@accion = 'indicadoresxservicio') 
 begin
  
   select distinct P.producto, P.nombre_producto, I.indicador, I.nombre_indicador, I.etiqueta,
     CP.orden_producto, P.visible_brief visible_modal, I.visible visible_panel,P.servicio_contratado
     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 = @p_cliente) SUSC
               ON (CP.cliente = SUSC.cliente AND I.indicador = SUSC.indicador)

     where CP.cliente = @p_cliente
      and CP.activo = 1
      and (P.suscribe_indicadores = 0 or SUSC.indicador IS NOT NULL)
      and P.servicio_contratado in (@p_servicio,0)
   order by CP.orden_producto
   
 end


 -- consulta para todos los indicadores 
 if (@accion = 'indicadores') 
 begin
  
   select distinct P.producto, P.nombre_producto, I.indicador, I.nombre_indicador, I.etiqueta,
     CP.orden_producto, P.visible_brief visible_modal, I.visible visible_panel
     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 = @p_cliente) SUSC
               ON (CP.cliente = SUSC.cliente AND I.indicador = SUSC.indicador)

     where CP.cliente = @p_cliente
      and CP.activo = 1
      and (P.suscribe_indicadores = 0 
           or SUSC.indicador IS NOT NULL)
   order by CP.orden_producto
   
 end

 -- consulta para ver si tienen indicadores restringidos 
 if (@accion = 'indicadores_restringidos') begin
  select distinct servicio_contratado, indicador 
      from usuarios_restricciones 
    where usuarios_restricciones.cliente = @p_cliente
   and usuarios_restricciones.user_id = @p_user_id
   and usuarios_restricciones.servicio_contratado = @p_servicio
   /*and familia is null 
    and pais_servicio is null*/
 
   and indicador is not null
 end

 -- consulta para ver si tienen paises restringidos 
 if (@accion = 'paises_restringidos') begin
  -- los paises que existen y tienen nulo familia e indicador, significa que no puede ver el pais
  select distinct servicio_contratado, pais_servicio
   from usuarios_restricciones 
    where usuarios_restricciones.cliente = @p_cliente
   and usuarios_restricciones.user_id = @p_user_id
   and usuarios_restricciones.servicio_contratado = @p_servicio
   and familia is null 
   and indicador is null 
   and pais_servicio is not null 
 end
 
 /* 30/3/2023 */
 declare @tiene_paises int = (select count(*) from cliente_paises 
             where cliente = @p_cliente and activo = 1 and servicio_contratado = @p_servicio)
 -- Si tiene paises de servicio, y tiene restricciones por familia y pais NULL elimina esos registros.
 -- Ya que las restricciones serán por pais/familia 
 if (@tiene_paises > 0)
 begin
  --delete from usuarios_restricciones 
  update usuarios_restricciones set servicio_contratado = servicio_contratado + 99000
      where usuarios_restricciones.cliente = @p_cliente
       and usuarios_restricciones.servicio_contratado = @p_servicio
       and pais_servicio is null
       and indicador is null 
       and familia is not null 
 end 
 /**/
 
 -- consulta para ver si tienen familias restringidas
 if (@accion = 'familias_restringidas') begin
  select distinct servicio_contratado, pais_servicio, familia
   from usuarios_restricciones 
    where usuarios_restricciones.cliente = @p_cliente
   and usuarios_restricciones.user_id = @p_user_id
   and usuarios_restricciones.servicio_contratado = @p_servicio
   --and (pais_servicio = @p_pais or pais_servicio is null)
   and (pais_servicio = @p_pais or (@tiene_paises = 0 and pais_servicio is null)) --solo ve pais_servicio nulo si es un cliente sin paises
   and indicador is null 
   and familia is not null 
 end
 /*
  if (@accion = 'insert') begin
 
  begin try
 
  insert into LN_usuarios_productos (user_id, producto, created, created_by)
  values (@p_user_id, @p_producto, GETDATE(), @p_created_by)
 
  end try
  begin catch
  end catch
 
  end
 
  if (@accion = 'delete') begin
 
  if (@p_user_id is not null) begin
 
  -- no hay asignación (tiene todos), inserto todos menos el seleccionado
 
  if not exists (select producto from LN_usuarios_productos
  where user_id = @p_user_id and producto = @p_producto)
 
  insert into LN_usuarios_productos (user_id, producto, created, created_by)
  select @p_user_id as user_id, LN_cliente_productos.producto, GETDATE() as created, @p_created_by as created_by
  from LN_cliente_productos inner join clientes_usuarios on LN_cliente_productos.cliente = clientes_usuarios.cliente
  where clientes_usuarios.user_id = @p_user_id
  and LN_cliente_productos.activo = 1
  and LN_cliente_productos.producto <> @p_producto
 
 
  else
 
  --- borro el producto del usuario
  begin try
 
  delete from LN_usuarios_productos  where user_id = @p_user_id and producto = @p_producto
 
  end try
  begin catch
  end catch
 
  end
 
  end
 
 
  -- los disponibles a suscribir por el usuario
  if (@accion = 'productos_disponibles') begin
 
  if (@p_user_id is not null) begin
 
  select @cliente = cliente from clientes_usuarios
  where user_id = @p_user_id
 
  if (@cliente is not null) begin
 
  if not exists (select producto from LN_usuarios_productos
  where user_id = @p_user_id)
 
  /*select LN_productos.producto, LN_productos.nombre_producto, LN_productos.producto_id, LN_productos.balance, LN_productos.documentos
  from LN_productos inner join LN_cliente_productos on LN_productos.producto = LN_cliente_productos.producto
  where LN_cliente_productos.cliente = @cliente
  and LN_cliente_productos.activo = 1
  and LN_productos.visible = 1
  order by LN_cliente_productos.orden_producto*/

 
  select LN_productos.producto, LN_productos.nombre_producto, LN_productos.producto_id, LN_productos.balance, LN_productos.documentos
  from LN_productos where producto < 0
 
 
  else
 
  select LN_productos.producto, LN_productos.nombre_producto, LN_productos.producto_id, LN_productos.balance, LN_productos.documentos
  from LN_productos inner join LN_cliente_productos on LN_productos.producto = LN_cliente_productos.producto
  where LN_cliente_productos.cliente = @cliente
  and LN_cliente_productos.activo = 1
  and LN_productos.visible = 1
  and LN_productos.producto NOT IN 
  (select producto from LN_usuarios_productos where user_id = @p_user_id)
  order by LN_cliente_productos.orden_producto
 
  end 
 
  end
 
  end
 
 
  if (@accion = 'productos_usuario') begin
 
  if (@p_user_id is not null) begin
 
  select @cliente = cliente from clientes_usuarios
  where user_id = @p_user_id
 
  if (@cliente is not null) begin
 
  if not exists (select producto from LN_usuarios_productos
  where user_id = @p_user_id)
 
  -- acceso a todos los productos del cliente
  select LN_productos.producto, LN_productos.nombre_producto, LN_productos.producto_id, LN_productos.balance, LN_productos.documentos
  from LN_productos inner join LN_cliente_productos on LN_productos.producto = LN_cliente_productos.producto
  where LN_cliente_productos.cliente = @cliente
  and LN_cliente_productos.activo = 1
  and LN_productos.visible = 1
  order by LN_cliente_productos.orden_producto
 
  else
 
  -- acceso a los productos asignados 
  select LN_productos.producto, LN_productos.nombre_producto, LN_productos.producto_id, LN_productos.balance, LN_productos.documentos
  from LN_productos inner join LN_cliente_productos on LN_productos.producto = LN_cliente_productos.producto
  inner join LN_usuarios_productos on LN_cliente_productos.producto = LN_usuarios_productos.producto
  where LN_cliente_productos.cliente = @cliente
  and LN_usuarios_productos.user_id = @p_user_id
  and LN_cliente_productos.activo = 1
  and LN_productos.visible = 1
  order by LN_cliente_productos.orden_producto
 
 
  end
 
  end
 
  end
 
 
  if (@accion = 'asignar_todos') begin
 
  if (@p_user_id is not null) begin
 
  -- Para visibilidad de todos los productos, la tabla no debe tener registros para el usuario
  delete from LN_usuarios_productos where user_id = @p_user_id
 
  end
 
  end
 
  -- chequear la visibilidad de un usuario a un producto. Devuelve un recordset user_id, id_producto
  if (@accion = 'check') begin
 
  if (@p_user_id is not null and @p_producto is not null) begin
 
  select @cliente = cliente from clientes_usuarios
  where user_id = @p_user_id
 
  if (@cliente is not null) begin
 
  if not exists (select user_id, producto from LN_usuarios_productos
  where user_id = @p_user_id and producto = @p_producto) begin
 
  -- como no está asignado explícitamente se debe verificar que esté asignado activo al cliente
  select @p_user_id as user_id, @p_producto as producto
  from LN_cliente_productos inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
  where LN_cliente_productos.activo = 1
  and LN_productos.visible = 1
  and LN_cliente_productos.cliente = @cliente
  and LN_cliente_productos.producto = @p_producto
 
  end else begin
 
  -- asignado explícitamente, cruzamos la info con la asignación al cliente 
  select @p_user_id as user_id, @p_producto as producto
  from LN_cliente_productos inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
  inner join clientes_usuarios on LN_cliente_productos.cliente = clientes_usuarios.cliente
  inner join LN_usuarios_productos on (clientes_usuarios.user_id = LN_usuarios_productos.user_id
  and LN_cliente_productos.producto = LN_usuarios_productos.producto)
  where LN_cliente_productos.activo = 1
  and LN_productos.visible = 1
  and LN_cliente_productos.cliente = @cliente
  and LN_cliente_productos.producto = @p_producto
  and LN_usuarios_productos.user_id = @p_user_id
 
 
  end
 
  end
 
  end
 
  end
 
 
 */

 
END
GO

Used By

No items found