Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
6| Name | Data Type | Length | Description |
|---|---|---|---|
| @p_cliente | int | 4 | |
| @p_user_id | int | 4 | |
| @p_servicio | int | 4 | |
| @p_lista_completa | varchar | -1 | |
| @p_lista_usuario | varchar | -1 | |
| @p_user_by | int | 4 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: Marita Soria
-- Create date: 16/06/2020
-- Description: Graba restricciones de indicadores para usuarios
-- Se manda la lista de los permitidos, entonces busca los que no estan en la lista,
-- esos son los que hay que restringir
-- =============================================
/*
exec [usuarios_restricciones_indicadores] 5546348, 852844375,47,
'4,221,273,6,29,37,32,33,34,52,53,79,55,78,159,274,167,169,51,54,43,44,45,46,47,48' ,
'4,221,273,6,29,37,32,33,34,52,53,79,55,78,159,274,167,169,43,44,45,46,47,48' , 1
select * from usuarios_restricciones where cliente = 5546348
*/
CREATE OR ALTER PROCEDURE dbo.usuarios_restricciones_indicadores
@p_cliente int = NULL,
@p_user_id int = NULL,
@p_servicio int = NULL,
@p_lista_completa varchar(max) = NULL,
@p_lista_usuario varchar(max) = NULL,
@p_user_by int = NULL
AS
BEGIN
SET NOCOUNT ON;
declare @indicadores_a_restringir table (indicador int)
insert into @indicadores_a_restringir
select a.item as indicador
from dbo.DelimitedSplit8K(@p_lista_completa, ',') a
where not exists (select item from dbo.DelimitedSplit8K(@p_lista_usuario, ',') b
where b.item = a.item)
select * from @indicadores_a_restringir
/* Si ya estaba la restriccion, graba fecha de modificacion */
update usuarios_restricciones
set modified = getdate(), modified_by = @p_user_by
where cliente = @p_cliente
and user_id = @p_user_id
and servicio_contratado = @p_servicio
and pais_servicio is null
and familia is null
and indicador in (select indicador from @indicadores_a_restringir)
/* Si no estaba la restriccion la graba */
insert into usuarios_restricciones (cliente, user_id, servicio_contratado, indicador, created, created_by)
select @p_cliente, @p_user_id, @p_servicio, indicador, getdate(), @p_user_by
from @indicadores_a_restringir a
where not exists (select * from usuarios_restricciones ur
where ur.cliente = @p_cliente
and ur.user_id = @p_user_id
and ur.servicio_contratado = @p_servicio
and ur.pais_servicio is null
and ur.familia is null
and ur.indicador = a.indicador)
/* Borra los registros de indicadores restringidos, que ahora no se quieren restringir */
delete from usuarios_restricciones
where cliente = @p_cliente
and user_id = @p_user_id
and servicio_contratado = @p_servicio
and pais_servicio is null
and familia is null
and indicador not in (select indicador from @indicadores_a_restringir)
/* No hace falta, lo facemos en el stored [usuarios_productos_habilitados_] buscamos en el momento los productos e indicadores habilitados
Asi nos evitamos completar esta tabla para todos los usuarios ya existentes
-- Productos: agregado 15/06/2022
-- Busca todos los productos que tiene el cliente con sus indicadores suscriptos
-- y que alguno de sus indicadores no este restringido
declare @productos table (producto int)
insert into @productos (producto)
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)
-- que alguno de sus indicadores no esté en la lista de restringidos
and I.indicador not in (select indicador from @indicadores_a_restringir)
update usuarios_productos_habilitados
set modified = getdate(), modified_by = @p_user_by
where cliente = @p_cliente
and user_id = @p_user_id
and servicio_contratado = @p_servicio
and producto in (select producto from @productos)
insert into usuarios_productos_habilitados (cliente, user_id, servicio_contratado, producto, created, created_by)
select @p_cliente, @p_user_id, @p_servicio, producto, getdate(), @p_user_by
from @productos a
where not exists (select * from usuarios_productos_habilitados up
where up.cliente = @p_cliente
and up.user_id = @p_user_id
and up.servicio_contratado = @p_servicio
and up.producto = a.producto)
delete from usuarios_productos_habilitados
where cliente = @p_cliente
and user_id = @p_user_id
and servicio_contratado = @p_servicio
and producto not in (select producto from @productos)
-- Fin Productos: Fin agregado 15/06/2022
*/
END
/*
delete from usuarios_productos_habilitados
drop table usuarios_productos_habilitados
select LN_productos.nombre_producto, * from usuarios_productos_habilitados
inner join LN_productos on LN_productos.producto = usuarios_productos_habilitados.producto
Por si se quiere usar en algĂșn momento
USE [Fidelitas]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[usuarios_productos_habilitados](
[id] [int] IDENTITY(1,1) NOT NULL,
[cliente] [int] NULL,
[user_id] [int] NOT NULL,
[servicio_contratado] [int] NOT NULL,
[producto] [int] NULL,
[created] [datetime] NULL,
[created_by] [int] NULL,
[modified] [datetime] NULL,
[modified_by] [int] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[usuarios_productos_habilitados] ADD DEFAULT (getdate()) FOR [created]
GO
*/
GO
GO
-- =============================================
-- Author: Marita Soria
-- Create date: 16/06/2020
-- Description: Graba restricciones de indicadores para usuarios
-- Se manda la lista de los permitidos, entonces busca los que no estan en la lista,
-- esos son los que hay que restringir
-- =============================================
/*
exec [usuarios_restricciones_indicadores] 5546348, 852844375,47,
'4,221,273,6,29,37,32,33,34,52,53,79,55,78,159,274,167,169,51,54,43,44,45,46,47,48' ,
'4,221,273,6,29,37,32,33,34,52,53,79,55,78,159,274,167,169,43,44,45,46,47,48' , 1
select * from usuarios_restricciones where cliente = 5546348
*/
CREATE OR ALTER PROCEDURE dbo.usuarios_restricciones_indicadores
@p_cliente int = NULL,
@p_user_id int = NULL,
@p_servicio int = NULL,
@p_lista_completa varchar(max) = NULL,
@p_lista_usuario varchar(max) = NULL,
@p_user_by int = NULL
AS
BEGIN
SET NOCOUNT ON;
declare @indicadores_a_restringir table (indicador int)
insert into @indicadores_a_restringir
select a.item as indicador
from dbo.DelimitedSplit8K(@p_lista_completa, ',') a
where not exists (select item from dbo.DelimitedSplit8K(@p_lista_usuario, ',') b
where b.item = a.item)
select * from @indicadores_a_restringir
/* Si ya estaba la restriccion, graba fecha de modificacion */
update usuarios_restricciones
set modified = getdate(), modified_by = @p_user_by
where cliente = @p_cliente
and user_id = @p_user_id
and servicio_contratado = @p_servicio
and pais_servicio is null
and familia is null
and indicador in (select indicador from @indicadores_a_restringir)
/* Si no estaba la restriccion la graba */
insert into usuarios_restricciones (cliente, user_id, servicio_contratado, indicador, created, created_by)
select @p_cliente, @p_user_id, @p_servicio, indicador, getdate(), @p_user_by
from @indicadores_a_restringir a
where not exists (select * from usuarios_restricciones ur
where ur.cliente = @p_cliente
and ur.user_id = @p_user_id
and ur.servicio_contratado = @p_servicio
and ur.pais_servicio is null
and ur.familia is null
and ur.indicador = a.indicador)
/* Borra los registros de indicadores restringidos, que ahora no se quieren restringir */
delete from usuarios_restricciones
where cliente = @p_cliente
and user_id = @p_user_id
and servicio_contratado = @p_servicio
and pais_servicio is null
and familia is null
and indicador not in (select indicador from @indicadores_a_restringir)
/* No hace falta, lo facemos en el stored [usuarios_productos_habilitados_] buscamos en el momento los productos e indicadores habilitados
Asi nos evitamos completar esta tabla para todos los usuarios ya existentes
-- Productos: agregado 15/06/2022
-- Busca todos los productos que tiene el cliente con sus indicadores suscriptos
-- y que alguno de sus indicadores no este restringido
declare @productos table (producto int)
insert into @productos (producto)
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)
-- que alguno de sus indicadores no esté en la lista de restringidos
and I.indicador not in (select indicador from @indicadores_a_restringir)
update usuarios_productos_habilitados
set modified = getdate(), modified_by = @p_user_by
where cliente = @p_cliente
and user_id = @p_user_id
and servicio_contratado = @p_servicio
and producto in (select producto from @productos)
insert into usuarios_productos_habilitados (cliente, user_id, servicio_contratado, producto, created, created_by)
select @p_cliente, @p_user_id, @p_servicio, producto, getdate(), @p_user_by
from @productos a
where not exists (select * from usuarios_productos_habilitados up
where up.cliente = @p_cliente
and up.user_id = @p_user_id
and up.servicio_contratado = @p_servicio
and up.producto = a.producto)
delete from usuarios_productos_habilitados
where cliente = @p_cliente
and user_id = @p_user_id
and servicio_contratado = @p_servicio
and producto not in (select producto from @productos)
-- Fin Productos: Fin agregado 15/06/2022
*/
END
/*
delete from usuarios_productos_habilitados
drop table usuarios_productos_habilitados
select LN_productos.nombre_producto, * from usuarios_productos_habilitados
inner join LN_productos on LN_productos.producto = usuarios_productos_habilitados.producto
Por si se quiere usar en algĂșn momento
USE [Fidelitas]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[usuarios_productos_habilitados](
[id] [int] IDENTITY(1,1) NOT NULL,
[cliente] [int] NULL,
[user_id] [int] NOT NULL,
[servicio_contratado] [int] NOT NULL,
[producto] [int] NULL,
[created] [datetime] NULL,
[created_by] [int] NULL,
[modified] [datetime] NULL,
[modified_by] [int] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[usuarios_productos_habilitados] ADD DEFAULT (getdate()) FOR [created]
GO
*/
GO
Depends On
2Used By
No items found