dbo.LN_cliente_productos_

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

10
Name Data Type Length Description
@action varchar 30
@p_cliente int 4
@p_producto int 4
@p_activo tinyint 1
@p_country_code varchar 2
@p_visibilidad_default tinyint 1
@p_user_id int 4
@p_dias_tolerancia_inicial int 4
@p_etiqueta_personalizada varchar 100
@p_servicio_contratado int 4

SQL Script

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

/*

exec LN_cliente_productos_ 'PRODUCTXSERV',601116452,null,null,null,null,422946826,null,null,47

*/



CREATE OR ALTER PROCEDURE dbo.LN_cliente_productos_
 -- Add the parameters for the stored procedure here
 @action         varchar(30),
 @p_cliente        int,
 @p_producto        int,
 @p_activo        tinyint,
 @p_country_code       varchar(2),
 @p_visibilidad_default     tinyint,
 @p_user_id        int,
 @p_dias_tolerancia_inicial    int = null,
 @p_etiqueta_personalizada    varchar(100) = NULL,
 @p_servicio_contratado     int = null

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

 DECLARE @ord tinyint
 DECLARE @cant tinyint
 DECLARE @prd int

  IF (@action = 'PRODUCTXSERV') 
  BEGIN
   /* si se pretende filtrar por servicio contratado ingresa acá */
   select LN_PRODUCTOS.servicio_contratado, LN_cliente_productos.cliente, LN_cliente_productos.producto, 
    LN_cliente_productos.dias_tolerancia_inicial,
    LN_cliente_productos.activo, LN_cliente_productos.created_by,
    LN_cliente_productos.modified_by, LN_cliente_productos.orden_producto,
    LN_cliente_productos.visibilidad_default, LN_cliente_productos.ponderacion,
    LN_cliente_productos.etiqueta_personalizada,
    CONVERT(VARCHAR(19), LN_cliente_productos.created, 121) AS created,
    CONVERT(VARCHAR(19), LN_cliente_productos.modified, 121) AS modified,
    users.first_name + ' ' + users.last_name as created_by_user,
    users2.first_name + ' ' + users2.last_name as modified_by_user,
    clientes.nombre_cliente, LN_productos.nombre_producto, LN_productos.country_code,
    country.country_name, LN_productos.balance, LN_cliente_productos.version_balance, 
    LN_productos.dossier, LN_productos.suscribe_indicadores, Ln_productos.producto_id
   from LN_cliente_productos
   inner join clientes on LN_cliente_productos.cliente = clientes.cliente
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   left outer join country on LN_productos.country_code = country.country_code
   left outer join users on LN_cliente_productos.created_by = users.user_id
   left outer join users AS users2 on LN_cliente_productos.modified_by = users2.user_id
   where LN_cliente_productos.cliente = @p_cliente
   and LN_productos.servicio_contratado IN (@p_servicio_contratado,0)
   order by clientes.nombre_cliente, 
    LN_cliente_productos.orden_producto, country.country_name, LN_productos.nombre_producto
   
   RETURN

  END 
      




 IF (@action = 'INSERT') BEGIN

  if not exists (select cliente, producto
      from LN_cliente_productos
      where cliente = @p_cliente
      and producto = @p_producto) begin


   select @ord = ISNULL(max(orden_producto),0)+1
   from LN_cliente_productos
   where cliente = @p_cliente   

   insert into LN_cliente_productos 
   (cliente, producto, activo, orden_producto, visibilidad_default, created_by, dias_tolerancia_inicial, etiqueta_personalizada)
   values
   (@p_cliente, @p_producto, @p_activo, @ord, @p_visibilidad_default, @p_user_id, @p_dias_tolerancia_inicial, @p_etiqueta_personalizada)


  /* 10/03/2021: 
   Cuando se da de alta un producto al cliente, si no suscribe indicadores, 
   (si suscribe indicadores, esto se hace en la carga de la suscripción al indicador) -> SP: [LN_cliente_indicadores_] 
   todos los usuarios del cliente no pueden ver los indicadores, para ello se cargan en usuarios_restricciones 
   */

  declare @indicador int
  declare @usuario   int 
  if (select suscribe_indicadores from LN_productos where producto = @p_producto) = 0
  begin
   DECLARE C_ind CURSOR FOR   
    select indicador from LN_indicadores where producto = @p_producto
   OPEN C_ind
   FETCH NEXT FROM C_ind INTO @indicador 
   WHILE @@fetch_status = 0
   BEGIN  
    DECLARE C_user CURSOR FOR   
     select distinct users.user_id
       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'
    OPEN C_user
    FETCH NEXT FROM C_user INTO @usuario 
    WHILE @@fetch_status = 0
    BEGIN  
     if not exists (select * from usuarios_restricciones 
         where user_id = @usuario and indicador = @indicador and servicio_contratado = 10) 
      insert into usuarios_restricciones (user_id,  cliente,     servicio_contratado, indicador,  created,   created_by) 
             values (@usuario, @p_cliente, '10',                 @indicador, getdate(), @p_user_id) 
     if not exists (select * from usuarios_restricciones 
         where user_id = @usuario and indicador = @indicador and servicio_contratado = 47) 
      insert into usuarios_restricciones (user_id,  cliente,     servicio_contratado, indicador,  created,   created_by) 
             values (@usuario, @p_cliente, '47',                 @indicador, getdate(), @p_user_id) 
     if not exists (select * from usuarios_restricciones 
         where user_id = @usuario and indicador = @indicador and servicio_contratado = 73) 
      insert into usuarios_restricciones (user_id,  cliente,     servicio_contratado, indicador,  created,   created_by) 
             values (@usuario, @p_cliente, '73',                 @indicador, getdate(), @p_user_id) 
     FETCH NEXT FROM C_user INTO @usuario 
    END
    CLOSE C_user
    DEALLOCATE C_user

    FETCH NEXT FROM C_ind INTO @indicador 
   END
   CLOSE C_ind
   DEALLOCATE C_ind 
  end 
  /* */


  end

 END ELSE

  IF (@action = 'UPDATE') BEGIN

   UPDATE LN_cliente_productos set
   visibilidad_default = @p_visibilidad_default,
   dias_tolerancia_inicial = @p_dias_tolerancia_inicial,
   etiqueta_personalizada = @p_etiqueta_personalizada,
   activo = @p_activo,
   modified = getdate(),
   modified_by = @p_user_id
   where cliente = @p_cliente 
   and producto = @p_producto


  END ELSE

   IF (@action = 'DELETE') BEGIN

    SELECT @ord = orden_producto
    from LN_cliente_productos
    where cliente = @p_cliente
    and producto = @p_producto

    delete from LN_cliente_productos where cliente = @p_cliente AND producto = @p_producto

    UPDATE LN_cliente_productos set orden_producto = orden_producto-1
    where cliente = @p_cliente
    and orden_producto > @ord
   
   END ELSE

    IF (@action = 'UP') BEGIN

     SELECT @ord = orden_producto
     from LN_cliente_productos
     where cliente = @p_cliente
     and producto = @p_producto

     IF (@ord > 1) BEGIN

      SELECT @prd = producto
      from LN_cliente_productos
      where cliente = @p_cliente      
      and orden_producto = (@ord-1)

      UPDATE LN_cliente_productos SET
       orden_producto = @ord - 1
      where cliente = @p_cliente
      and producto = @p_producto

      UPDATE LN_cliente_productos SET
       orden_producto = @ord
      where cliente = @p_cliente
      and producto = @prd

     END

    END ELSE

     IF (@action = 'DOWN') BEGIN

      SELECT @ord = orden_producto
      from LN_cliente_productos
      where cliente = @p_cliente
      and producto = @p_producto

      SELECT @cant = MAX(orden_producto)
      from LN_cliente_productos
      where cliente = @p_cliente 


      IF (@ord < @cant) BEGIN

       SELECT @prd = producto
       from LN_cliente_productos
       where cliente = @p_cliente      
       and orden_producto = (@ord+1)

       UPDATE LN_cliente_productos SET
        orden_producto = @ord + 1
       where cliente = @p_cliente
       and producto = @p_producto

       UPDATE LN_cliente_productos SET
        orden_producto = @ord
       where cliente = @p_cliente
       and producto = @prd

      END



     END ELSE

      /* Dado un cliente y un país, todos los productos asociados al cliente que estén
       vinculados al páis o que no estén asociados a ningún país */

      IF (@action = 'PRODUCTOS_PAIS') BEGIN
       
       select LN_cliente_productos.cliente, LN_cliente_productos.producto, 
        LN_cliente_productos.dias_tolerancia_inicial,
        LN_cliente_productos.activo, LN_cliente_productos.created_by,
        LN_cliente_productos.modified_by, LN_cliente_productos.orden_producto,
        LN_cliente_productos.visibilidad_default, LN_cliente_productos.ponderacion,
        LN_cliente_productos.etiqueta_personalizada,
        CONVERT(VARCHAR(19), LN_cliente_productos.created, 121) AS created,
        CONVERT(VARCHAR(19), LN_cliente_productos.modified, 121) AS modified,
        users.first_name + ' ' + users.last_name as created_by_user,
        users2.first_name + ' ' + users2.last_name as modified_by_user,
        clientes.nombre_cliente, LN_productos.nombre_producto, LN_productos.country_code,
        country.country_name, LN_productos.balance, LN_productos.dossier, LN_productos.suscribe_indicadores, Ln_productos.producto_id
       from LN_cliente_productos
       inner join clientes on LN_cliente_productos.cliente = clientes.cliente
       inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
       left outer join country on LN_productos.country_code = country.country_code
       left outer join users on LN_cliente_productos.created_by = users.user_id
       left outer join users AS users2 on LN_cliente_productos.modified_by = users2.user_id
       where LN_cliente_productos.cliente = @p_cliente
       and (LN_productos.country_code = isnull(@p_country_code,'AR') OR LN_productos.country_code IS NULL)
       order by clientes.nombre_cliente, 
        LN_cliente_productos.orden_producto, country.country_name, LN_productos.nombre_producto


      END ELSE


      IF (@action = 'CONTROL_INGRESO') BEGIN

       SELECT LN_cliente_productos.*
       FROM LN_cliente_productos INNER JOIN LN_productos ON LN_cliente_productos.producto = LN_productos.producto
       WHERE LN_cliente_productos.cliente = @p_cliente
       AND LN_cliente_productos.activo = 1
       AND ISNULL(LN_productos.subcontratistas,0) = 1

      END ELSE
      
       /* FILTRO POR PAIS DEL PRODUCTO */
       IF (@p_country_code IS NULL) BEGIN

        IF (@p_cliente IS NULL and @p_producto IS NULL) BEGIN

         select LN_cliente_productos.cliente, LN_cliente_productos.producto, 
          LN_cliente_productos.dias_tolerancia_inicial,
          LN_cliente_productos.activo, LN_cliente_productos.created_by,
          LN_cliente_productos.modified_by, LN_cliente_productos.orden_producto,
          LN_cliente_productos.visibilidad_default, LN_cliente_productos.ponderacion,
          LN_cliente_productos.etiqueta_personalizada,
          CONVERT(VARCHAR(19), LN_cliente_productos.created, 121) AS created,
          CONVERT(VARCHAR(19), LN_cliente_productos.modified, 121) AS modified,
          users.first_name + ' ' + users.last_name as created_by_user,
          users2.first_name + ' ' + users2.last_name as modified_by_user,
          clientes.nombre_cliente, LN_productos.nombre_producto, LN_productos.country_code,
          country.country_name, LN_productos.balance, LN_cliente_productos.version_balance,
          LN_productos.dossier, LN_productos.suscribe_indicadores, Ln_productos.producto_id
         from LN_cliente_productos
         inner join clientes on LN_cliente_productos.cliente = clientes.cliente
         inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
         left outer join country on LN_productos.country_code = country.country_code
         left outer join users on LN_cliente_productos.created_by = users.user_id
         left outer join users AS users2 on LN_cliente_productos.modified_by = users2.user_id
         order by clientes.nombre_cliente, 
          LN_cliente_productos.orden_producto, country.country_name, LN_productos.nombre_producto


        end else

         IF (@p_cliente IS NULL and @p_producto IS NOT NULL) BEGIN

          select LN_cliente_productos.cliente, LN_cliente_productos.producto,
           LN_cliente_productos.dias_tolerancia_inicial, 
           LN_cliente_productos.activo, LN_cliente_productos.created_by,
           LN_cliente_productos.modified_by, LN_cliente_productos.orden_producto,
           LN_cliente_productos.visibilidad_default, LN_cliente_productos.ponderacion,
           LN_cliente_productos.etiqueta_personalizada,
           CONVERT(VARCHAR(19), LN_cliente_productos.created, 121) AS created,
           CONVERT(VARCHAR(19), LN_cliente_productos.modified, 121) AS modified,
           users.first_name + ' ' + users.last_name as created_by_user,
           users2.first_name + ' ' + users2.last_name as modified_by_user,
           clientes.nombre_cliente, LN_productos.nombre_producto, LN_productos.country_code,
           country.country_name, LN_productos.balance, LN_cliente_productos.version_balance, 
           LN_productos.dossier, LN_productos.suscribe_indicadores, Ln_productos.producto_id
          from LN_cliente_productos
          inner join clientes on LN_cliente_productos.cliente = clientes.cliente
          inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
          left outer join country on LN_productos.country_code = country.country_code
          left outer join users on LN_cliente_productos.created_by = users.user_id
          left outer join users AS users2 on LN_cliente_productos.modified_by = users2.user_id
          where LN_cliente_productos.producto = @p_producto
          order by clientes.nombre_cliente, 
           LN_cliente_productos.orden_producto, country.country_name, LN_productos.nombre_producto


         end else

                                        /* ESTA ES LA ACCIÓN SEARCH */

          if (@p_cliente IS NOT NULL and @p_producto IS NULL) BEGIN

           select 'AA' as AA, LN_cliente_productos.cliente, LN_cliente_productos.producto, 
            LN_cliente_productos.dias_tolerancia_inicial,
            LN_cliente_productos.activo, LN_cliente_productos.created_by,
            LN_cliente_productos.modified_by, LN_cliente_productos.orden_producto,
            LN_cliente_productos.visibilidad_default, LN_cliente_productos.ponderacion,
            LN_cliente_productos.etiqueta_personalizada,
            CONVERT(VARCHAR(19), LN_cliente_productos.created, 121) AS created,
            CONVERT(VARCHAR(19), LN_cliente_productos.modified, 121) AS modified,
            users.first_name + ' ' + users.last_name as created_by_user,
            users2.first_name + ' ' + users2.last_name as modified_by_user,
            clientes.nombre_cliente, LN_productos.nombre_producto, LN_productos.country_code,
            country.country_name, LN_productos.balance, LN_cliente_productos.version_balance, 
            LN_productos.dossier, LN_productos.suscribe_indicadores, Ln_productos.producto_id
           from LN_cliente_productos
           inner join clientes on LN_cliente_productos.cliente = clientes.cliente
           inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
           left outer join country on LN_productos.country_code = country.country_code
           left outer join users on LN_cliente_productos.created_by = users.user_id
           left outer join users AS users2 on LN_cliente_productos.modified_by = users2.user_id
           where LN_cliente_productos.cliente = @p_cliente
           order by clientes.nombre_cliente, 
            LN_cliente_productos.orden_producto, country.country_name, LN_productos.nombre_producto

          END ELSE

          /* si el action es search y pretende filtrar por producto ingresa acá */

           select LN_cliente_productos.cliente, LN_cliente_productos.producto, 
            LN_cliente_productos.dias_tolerancia_inicial,
            LN_cliente_productos.activo, LN_cliente_productos.created_by,
            LN_cliente_productos.modified_by, LN_cliente_productos.orden_producto,
            LN_cliente_productos.visibilidad_default, LN_cliente_productos.ponderacion,
            LN_cliente_productos.etiqueta_personalizada,
            CONVERT(VARCHAR(19), LN_cliente_productos.created, 121) AS created,
            CONVERT(VARCHAR(19), LN_cliente_productos.modified, 121) AS modified,
            users.first_name + ' ' + users.last_name as created_by_user,
            users2.first_name + ' ' + users2.last_name as modified_by_user,
            clientes.nombre_cliente, LN_productos.nombre_producto, LN_productos.country_code,
            country.country_name, LN_productos.balance, LN_cliente_productos.version_balance, 
            LN_productos.dossier, LN_productos.suscribe_indicadores, Ln_productos.producto_id
           from LN_cliente_productos
           inner join clientes on LN_cliente_productos.cliente = clientes.cliente
           inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
           left outer join country on LN_productos.country_code = country.country_code
           left outer join users on LN_cliente_productos.created_by = users.user_id
           left outer join users AS users2 on LN_cliente_productos.modified_by = users2.user_id
           where LN_cliente_productos.cliente = @p_cliente
           and LN_cliente_productos.producto = @p_producto
           order by clientes.nombre_cliente, 
            LN_cliente_productos.orden_producto, country.country_name, LN_productos.nombre_producto
      


       END ELSE BEGIN

        IF (@p_cliente IS NULL and @p_producto IS NULL) BEGIN

         select LN_cliente_productos.cliente, LN_cliente_productos.producto,
          LN_cliente_productos.dias_tolerancia_inicial, 
          LN_cliente_productos.activo, LN_cliente_productos.created_by,
          LN_cliente_productos.modified_by, LN_cliente_productos.orden_producto,
          LN_cliente_productos.visibilidad_default, LN_cliente_productos.ponderacion,
          LN_cliente_productos.etiqueta_personalizada,
          CONVERT(VARCHAR(19), LN_cliente_productos.created, 121) AS created,
          CONVERT(VARCHAR(19), LN_cliente_productos.modified, 121) AS modified,
          users.first_name + ' ' + users.last_name as created_by_user,
          users2.first_name + ' ' + users2.last_name as modified_by_user,
          clientes.nombre_cliente, LN_productos.nombre_producto, LN_productos.country_code,
          country.country_name, LN_productos.balance, LN_cliente_productos.version_balance, 
          LN_productos.dossier, LN_productos.suscribe_indicadores, LN_productos.producto_id
         from LN_cliente_productos
         inner join clientes on LN_cliente_productos.cliente = clientes.cliente
         inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
         left outer join country on LN_productos.country_code = country.country_code
         left outer join users on LN_cliente_productos.created_by = users.user_id
         left outer join users AS users2 on LN_cliente_productos.modified_by = users2.user_id
         WHERE LN_productos.country_code = @p_country_code
         order by clientes.nombre_cliente,
          LN_cliente_productos.orden_producto, country.country_name, LN_productos.nombre_producto


        end else

         IF (@p_cliente IS NULL and @p_producto IS NOT NULL) BEGIN

          select LN_cliente_productos.cliente, LN_cliente_productos.producto, 
           LN_cliente_productos.dias_tolerancia_inicial,
           LN_cliente_productos.activo, LN_cliente_productos.created_by,
           LN_cliente_productos.modified_by, LN_cliente_productos.orden_producto,
           LN_cliente_productos.visibilidad_default, LN_cliente_productos.ponderacion,
           LN_cliente_productos.etiqueta_personalizada,
           CONVERT(VARCHAR(19), LN_cliente_productos.created, 121) AS created,
           CONVERT(VARCHAR(19), LN_cliente_productos.modified, 121) AS modified,
           users.first_name + ' ' + users.last_name as created_by_user,
           users2.first_name + ' ' + users2.last_name as modified_by_user,
           clientes.nombre_cliente, LN_productos.nombre_producto, LN_productos.country_code,
           country.country_name, LN_productos.balance, LN_cliente_productos.version_balance, 
           LN_productos.dossier, LN_productos.suscribe_indicadores, LN_productos.producto_id
          from LN_cliente_productos
          inner join clientes on LN_cliente_productos.cliente = clientes.cliente
          inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
          left outer join country on LN_productos.country_code = country.country_code
          left outer join users on LN_cliente_productos.created_by = users.user_id
          left outer join users AS users2 on LN_cliente_productos.modified_by = users2.user_id
          where LN_cliente_productos.producto = @p_producto
          and LN_productos.country_code = @p_country_code
          order by clientes.nombre_cliente, 
           LN_cliente_productos.orden_producto, country.country_name, LN_productos.nombre_producto


         end else

          if (@p_cliente IS NOT NULL and @p_producto IS NULL) BEGIN

           select LN_cliente_productos.cliente, LN_cliente_productos.producto, 
            LN_cliente_productos.dias_tolerancia_inicial,
            LN_cliente_productos.activo, LN_cliente_productos.created_by,
            LN_cliente_productos.modified_by, LN_cliente_productos.orden_producto,
            LN_cliente_productos.visibilidad_default, LN_cliente_productos.ponderacion,
            LN_cliente_productos.etiqueta_personalizada,
            CONVERT(VARCHAR(19), LN_cliente_productos.created, 121) AS created,
            CONVERT(VARCHAR(19), LN_cliente_productos.modified, 121) AS modified,
            users.first_name + ' ' + users.last_name as created_by_user,
            users2.first_name + ' ' + users2.last_name as modified_by_user,
            clientes.nombre_cliente, LN_productos.nombre_producto, LN_productos.country_code,
            country.country_name, LN_productos.balance, LN_cliente_productos.version_balance, 
            LN_productos.dossier, LN_productos.suscribe_indicadores, LN_productos.producto_id
           from LN_cliente_productos
           inner join clientes on LN_cliente_productos.cliente = clientes.cliente
           inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
           left outer join country on LN_productos.country_code = country.country_code
           left outer join users on LN_cliente_productos.created_by = users.user_id
           left outer join users AS users2 on LN_cliente_productos.modified_by = users2.user_id
           where LN_cliente_productos.cliente = @p_cliente
           and LN_productos.country_code = @p_country_code
           order by clientes.nombre_cliente,
            LN_cliente_productos.orden_producto, country.country_name, LN_productos.nombre_producto

          END ELSE

           select LN_cliente_productos.cliente, LN_cliente_productos.producto, 
            LN_cliente_productos.dias_tolerancia_inicial,
            LN_cliente_productos.activo, LN_cliente_productos.created_by,
            LN_cliente_productos.modified_by, LN_cliente_productos.orden_producto,
            LN_cliente_productos.visibilidad_default, LN_cliente_productos.ponderacion,
            LN_cliente_productos.etiqueta_personalizada,
            CONVERT(VARCHAR(19), LN_cliente_productos.created, 121) AS created,
            CONVERT(VARCHAR(19), LN_cliente_productos.modified, 121) AS modified,
            users.first_name + ' ' + users.last_name as created_by_user,
            users2.first_name + ' ' + users2.last_name as modified_by_user,
            clientes.nombre_cliente, LN_productos.nombre_producto, LN_productos.country_code,
            country.country_name, LN_productos.balance, LN_cliente_productos.version_balance, 
            LN_productos.dossier, LN_productos.suscribe_indicadores, LN_productos.producto_id
           from LN_cliente_productos
           inner join clientes on LN_cliente_productos.cliente = clientes.cliente
           inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
           left outer join country on LN_productos.country_code = country.country_code
           left outer join users on LN_cliente_productos.created_by = users.user_id
           left outer join users AS users2 on LN_cliente_productos.modified_by = users2.user_id
           where LN_cliente_productos.cliente = @p_cliente
           and LN_cliente_productos.producto = @p_producto
           and LN_productos.country_code = @p_country_code
           order by clientes.nombre_cliente, 
            LN_cliente_productos.orden_producto, country.country_name, LN_productos.nombre_producto
      

       END

      
END

GO

Used By

No items found