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
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
Depends On
5Used By
No items found