dbo.LN_usuarios_productos_

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

5
Name Data Type Length Description
@accion varchar 50
@p_user_id int 4
@p_producto int 4
@p_cliente int 4
@p_created_by int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>

/*

exec ln_usuarios_productos_ 'check',893684615,2003
exec ln_usuarios_productos_ 'cliente',NULL,NULL,3920694

exec ln_usuarios_productos_ 'productos_disponibles',893684615
exec ln_usuarios_productos_ 'productos_usuario',893684615


*/

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

 @accion            varchar(50) = NULL,
 @p_user_id           int = NULL,
 @p_producto           int = NULL,
 @p_cliente           int = NULL,
 @p_created_by          int = NULL



AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

    -- Insert statements for procedure here

 DECLARE @cliente int = null

 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


 -- consulta para todos los usuarios del cliente 
 if (@accion = 'cliente') begin

  if (@p_cliente is not null)

   select users.user_id, users.first_name, users.last_name, users.email, users.username, acceso.productos

   from users
   inner join clientes_usuarios on users.user_id = clientes_usuarios.user_id
   left outer join (   
       select LN_usuarios_productos.user_id,
         STUFF(
              (select '|' + LN_productos.nombre_producto
              from LN_usuarios_productos up 
              inner join LN_productos on up.producto = LN_productos.producto
              inner join clientes_usuarios cu on up.user_id = cu.user_id
              inner join LN_cliente_productos on (cu.cliente = LN_cliente_productos.cliente
                       and LN_productos.producto = LN_cliente_productos.producto
                       and LN_cliente_productos.activo = 1)
              where cu.cliente = @p_cliente
              and up.user_id = LN_usuarios_productos.user_id
              FOR XML PATH ('')) , 1, 1, ''
             ) as productos

       from LN_usuarios_productos
       inner join clientes_usuarios on LN_usuarios_productos.user_id = clientes_usuarios.user_id
       inner join LN_cliente_productos on (clientes_usuarios.cliente = LN_cliente_productos.cliente         
                and LN_cliente_productos.activo = 1)
       where clientes_usuarios.cliente = @p_cliente
       group by LN_usuarios_productos.user_id) acceso on users.user_id = acceso.user_id


   where clientes_usuarios.cliente = @p_cliente
   and users.active_user = 'Y'
   order by users.first_name, users.last_name

 end
 
END
GO

Used By

No items found