dbo.LN_contrapartes_queue_07122022

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

7
Name Data Type Length Description
@accion varchar 50
@p_queue_id int 4
@p_contraparte int 4
@p_cuit varchar 20
@p_clave_indicador varchar 50
@p_familia int 4
@p_id_taken int 4

SQL Script

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


--exec LN_contrapartes_queue_ 'indicadores_scores',NULL,147069

-- ============================================
--select * from LN_contrapartes_queue order by queue_id desc
/*
[LN_contrapartes_queue_]  'indicadores_anteriores', null, 608
[LN_contrapartes_queue_]  'insert_masivo'

exec LN_contrapartes_queue_  'pending'

select * from ln_contraparte_indicadores_trazabilidad where contraparte = 95

EXEC LN_contrapartes_queue_ 'indicadores_novisibles', NULL, 83726

*/

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

 @accion          varchar(50),
 @p_queue_id         int = NULL,
 @p_contraparte        int = NULL,
 @p_cuit          varchar(20) = null,
 @p_clave_indicador       varchar(50) = null,
 @p_familia         int = null,
 @p_id_taken         int = 10

AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
  
    declare @top int 
     declare @hora int = DATEPART(HOUR, getdate())
  if (@hora >= 7) 
  begin
      set @top = 100 /*200*/
   end
  else if (@hora >= 19) 
      begin
   set @top = 100 /*500*/
   end
  else 
   begin
   set @top = 100 /*500*/
   end
 

 if (@accion = 'pending') 
 begin
  update top (@top) LN_contrapartes_queue  set id_taken = @p_id_taken 
  where LN_contrapartes_queue.contraparte in (
  SELECT        TOP (100) LN_contrapartes_queue.contraparte
   from LN_contrapartes_queue 
   inner join LN_contrapartes on LN_contrapartes.contraparte = LN_contrapartes_queue.contraparte
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   left outer join pagos_transacciones on LN_contrapartes.contraparte = pagos_transacciones.contraparte
   where LN_contrapartes_queue.processed = 0 
   and LN_contraparte_familias.activo = 1
   and LN_contrapartes_queue.id_taken in (0,@p_id_taken) 
   order by LN_contrapartes_queue.created desc )
   and LN_contrapartes_queue.processed = 0 
   and LN_contrapartes_queue.id_taken = 0

     /* Si se corre entre las 0 y las 7 horas toma lotes de 5000 
         despues de las 7 am toma lotes de 200 */

  select LN_contrapartes_queue.*, LN_contrapartes.cliente, LN_contraparte_familias.familia,
      IIF(ln_contrapartes.servicio_contratado = '73', 'I',IIF (ln_contrapartes.subcontratista = 1, 'S','C')) as cs
   from LN_contrapartes_queue 
   inner join LN_contrapartes on LN_contrapartes.contraparte = LN_contrapartes_queue.contraparte
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   left outer join pagos_transacciones on LN_contrapartes.contraparte = pagos_transacciones.contraparte
   where LN_contrapartes_queue.processed = 0 
   --and iif(LN_contrapartes.modalidad_pago = 'PP', iif(pagos_transacciones.status = 'approved', 1, 0), 1) = 1
   and LN_contraparte_familias.activo = 1
   and LN_contrapartes_queue.id_taken=@p_id_taken
   order by LN_contrapartes_queue.created desc  
   /*select * from LN_contrapartes_queue where processed = 0 and contraparte in (SELECT distinct contraparte FROM LN_gestiones WHERE cliente = 110864291) order by created desc */

 end

 if (@accion = 'insert_masivo') begin
    insert into ln_contrapartes_queue (contraparte)
    select distinct LN_contrapartes.contraparte
   from LN_contrapartes 
  inner join ln_gestiones on ln_gestiones.contraparte = LN_contrapartes.contraparte
  INNER JOIN LN_contraparte_familias ON LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
  INNER JOIN LN_familias ON LN_familias.familia = LN_contraparte_familias.familia
  INNER JOIN LN_cliente_productos ON LN_contrapartes.cliente = LN_cliente_productos.cliente
  INNER JOIN LN_familia_productos ON LN_familia_productos.familia = LN_contraparte_familias.familia
  INNER JOIN LN_productos ON LN_productos.producto = LN_familia_productos.producto
  INNER JOIN LN_indicadores ON (LN_indicadores.producto = LN_familia_productos.producto and ln_indicadores.valoracion = 'A')
  LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
  left outer join pagos_transacciones on LN_contrapartes.contraparte = pagos_transacciones.contraparte

  where LN_contrapartes.activo = 1
  and ln_gestiones.desde <= getdate() and ln_gestiones.hasta >= getdate()
  AND LN_contraparte_familias.activo = 1
  and ln_familias.visible = 1
  and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
       or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)

  and iif(LN_contrapartes.modalidad_pago = 'PP', iif(pagos_transacciones.status = 'approved', 1, 0), 1) = 1
/* and LN_contrapartes.cliente NOT in (592432729,3920694,515494256,8484144) /* cliente demo, cortesía, coface,etc*/
and LN_contrapartes.cliente NOT in (806892136,639839799,110864291) 
*/

  /*--MONSANTO 110864291 --WHIRLPOOL 639839799 -- ASE 806892136 */
  /*
   and LN_contrapartes.cliente in (select distinct cliente from clientes where estado_cliente='A' 
   and cli_codigo in (1326,222,829,4117,5776,12345678,2000,10314,5797,12235,9659,5297,1486,5851,2301,2570,5635))
   */

  and LN_contrapartes.cliente in (select distinct cliente from clientes where estado_cliente='A' 
  and cli_codigo in (1326,222,5776,2000,/*5797,*/9659,1486,2301,5635, 5672,5673,12392,10314,3926,6084,4117))
  /*select * from clientes where cli_codigo in (1326,222,5776,2000,5797,9659,1486,2301,5635, 5672,5673,12392,10314,3926,6084,4117)*/
  and ln_contrapartes.contraparte not in (select distinct contraparte from LN_contrapartes where cliente = 5546348 and servicio_contratado=73)
  
  /*
   select cli_codigo,* from clientes where cli_codigo in (1326,222,5776,2000,5797,9659,1486,2301,5635, 5672,5673,12392,10314,3926,2549,6084,4117)
   */

  /* coface = ,5297 */

  
  /*and LN_contrapartes.cliente not in (0)*/
  
  /*select * from clientes where cli_codigo in (1326,222,829,4117,5776,12345678,2000,10314,5797,12235)*/
  /*select cli_codigo,* from clientes where nombre_cliente like '%valid%'*/
  
  
  delete ln_contrapartes_queue where processed = 0 and contraparte 
  in (
  select contraparte from ln_contrapartes where cliente /*not in (5546348,2046807993) )*/
  in (1226057645,528397,7855254,7048064,65327330,240155302,1659303046,6063454))


  
  /* 07/06/2022: Generación del panel de control de coface. Lo ponemos acá para que se regenere todos los días a la madrugada */
  
  --exec LN_Panel_Control_SAAS_datos 515494256
  exec LN_Panel_Control_SAAS_file  515494256

 end 

 if (@accion = 'insert') begin

  if (@p_contraparte is not null)
  begin
   if not exists (select * from LN_contrapartes_queue where contraparte = @p_contraparte and processed = 0)

    /* Modificado 22/01/2020 si es prepago y no existe pago aprobado no lo va a insertar para que procese */
    insert into LN_contrapartes_queue (contraparte) 
    select LN_contrapartes.contraparte 
    from LN_contrapartes
    left outer join pagos_transacciones on LN_contrapartes.contraparte = pagos_transacciones.contraparte
    where LN_contrapartes.contraparte = @p_contraparte
    --and iif(LN_contrapartes.modalidad_pago = 'PP', iif(pagos_transacciones.status = 'approved', 1, 0), 1) = 1

  end
  if (@p_cuit is not null) 
  begin

   /* Modificado 22/01/2020 si es prepago y no existe pago aprobado no lo va a insertar para que procese */
   insert into LN_contrapartes_queue (contraparte) 
   select a.contraparte from ln_contrapartes  a
   left outer join pagos_transacciones on a.contraparte = pagos_transacciones.contraparte
   where a.id_padron in (select id_padron from padrones where identificacion = @p_cuit)
   and not exists (select * from LN_contrapartes_queue b where b.contraparte = a.contraparte and b.processed = 0)
   --and iif(a.modalidad_pago = 'PP', iif(pagos_transacciones.status = 'approved', 1, 0), 1) = 1

    --and not exists (select * from ln_contrapartes_queue c where c.contraparte = a.contraparte and c.processed = 1 and c.created >= dateadd(minute,(-60),getdate())) 
  end
 end
 
 declare @gestion int 
 

 if (@accion = 'update') begin

  if (@p_queue_id is not null)
   update LN_contrapartes_queue set processed = 1, finished = getdate() where queue_id = @p_queue_id
   /* 
    -- NOVIEMBRE 14 2021 NO REMOVER HASTA HABLAR CON ALEJANDRO 
    UPDATE ln_contraparte_indicadores SEt valor_texto='AA',valor_numerico=1 where indicador in (384) and valor_texto='AA'
    UPDATE ln_contraparte_indicadores SEt valor_texto='PR',valor_numerico=2 where indicador in (384) and valor_texto='PR'
    UPDATE ln_contraparte_indicadores SEt valor_texto='NA',valor_numerico=3 where indicador in (384) and valor_texto='NA'
    UPDATE ln_contraparte_indicadores SEt valor_texto='XX',valor_numerico=4 where indicador in (384) and valor_texto='XX'
    -- select * from ln_contraparte_indicadores where indicador in (324)
    UPDATE ln_contraparte_indicadores SEt valor_texto='C',valor_numerico=20 where indicador in (324) and valor_texto IS NULL
    UPDATE ln_contraparte_indicadores SEt valor_texto='D',valor_numerico=10 where indicador in (324) and valor_texto='10'
    UPDATE ln_contraparte_indicadores SEt valor_texto='C',valor_numerico=20 where indicador in (324) and valor_texto='20'
    UPDATE ln_contraparte_indicadores SEt valor_texto='D',valor_numerico=30 where indicador in (324) and valor_texto='30'
    UPDATE ln_contraparte_indicadores SEt valor_texto='CCC',valor_numerico=40 where indicador in (324) and valor_texto='40'
    UPDATE ln_contraparte_indicadores SEt valor_texto='B',valor_numerico=50 where indicador in (324) and valor_texto='50'
    UPDATE ln_contraparte_indicadores SEt valor_texto='BB',valor_numerico=60 where indicador in (324) and valor_texto='60'
    UPDATE ln_contraparte_indicadores SEt valor_texto='BBB',valor_numerico=70 where indicador in (324) and valor_texto='70'
    UPDATE ln_contraparte_indicadores SEt valor_texto='A',valor_numerico=80 where indicador in (324) and valor_texto='80'
    UPDATE ln_contraparte_indicadores SEt valor_texto='AA',valor_numerico=90 where indicador in (324) and valor_texto='90'
    UPDATE ln_contraparte_indicadores SEt valor_texto='AAA',valor_numerico=100 where indicador in (324) and valor_texto='100'
    -- NOVIEMBRE 14 2021 NO REMOVER HASTA HABLAR CON ALEJANDRO 
    */



   -- 17/11/2021:Si tiene el indicador DICTAMEN_VRM y esta en periodo de tolerancia, lo graba con valor -120 (en tolerancia) 
   -- (20/12/2021) Lo graba en tolerancia si esta vacio, sino deja el valor que ya tenia... 
   -- Cuando se pasa del periodo de tolerancia, lo pasa a NO APTO (si tiene el valor en tolerancia)
  
   declare @contraparte int
   declare @cliente int 
   declare @familia int 
   declare @carga_inicial bit 
   select @contraparte = contraparte from LN_contrapartes_queue where queue_id = @p_queue_id
   select @cliente = cliente, @carga_inicial = carga_inicial from LN_contrapartes where contraparte = @contraparte
   select @familia = familia from ln_contraparte_familias where contraparte = @contraparte
   select @gestion = gestion from ln_gestiones  where contraparte = @contraparte and vigente = 1 and desde <= getdate() and hasta >= getdate()

   -- Veo si tiene el producto DICTAMEN_VRM y el indicador DICTAMEN_VRM
      
   declare @numero int = null 
   declare @texto varchar(100) = null 
   declare @texto_largo varchar(max) = null 


   if   exists (select * from ln_cliente_productos   where cliente = @cliente and producto = 2080 and activo = 1)
   and  exists (select * from ln_familia_productos   where familia = @familia and producto = 2080 and activo = 1)
   and  exists (select * from ln_cliente_indicadores where cliente = @cliente and indicador = 384 and activo = 1) 
   begin 
   -- esta en carga inicial?

    if (@carga_inicial = 1) 
    begin 

     select @numero = desde, @texto = texto, @texto_largo = texto_largo
      from ln_cliente_nivel where indicador = 384 and cliente = @cliente and texto = 'ET' -- En Tolerancia

     if not exists (select contraparte, gestion, indicador
               from LN_contraparte_indicadores
            where contraparte = @contraparte
              and gestion = @gestion
              and visible = 1
              and indicador = 384)
     begin

      INSERT INTO LN_contraparte_indicadores
      (contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created )
      VALUES
      (@contraparte, @gestion, '384',@numero,@texto,@texto_largo,GETDATE() )
      
      exec [LN_indicadores_manual_cliente] @contraparte, 'UPDATE','384','ET'
      
     end 
     else 
     begin
      --exec [LN_indicadores_manual_cliente] @contraparte, 'UPDATE','384','ET'*/
      -- (20/12/2021) Lo graba en tolerancia si esta vacio, sino deja el valor que ya tenia... 
       if exists (select contraparte, gestion, indicador
             from LN_contraparte_indicadores
          where contraparte = @contraparte
            and gestion = @gestion
            and visible = 1
            and indicador = 384 and valor_numerico is null)

       begin
       exec [LN_indicadores_manual_cliente] @contraparte, 'UPDATE','384','ET'
       end
     end 

    end
    else 
    begin 
     -- no esta en carga inicial, y el indicador dice EN TOLERANCIA, lo pasa a NO APTO

     select @numero = desde, @texto = texto, @texto_largo = texto_largo
      from ln_cliente_nivel where indicador = 384 and cliente = @cliente and texto = 'NA' -- No apto

     if exists (select contraparte, gestion, indicador
       from LN_contraparte_indicadores
       where contraparte = @contraparte
       and gestion = @gestion
       and visible = 1
       and indicador = 384
       and isnull(valor_texto,'ET') = 'ET')
     begin
      exec [LN_indicadores_manual_cliente] @contraparte, 'UPDATE','384','NA'
     end 

     if not exists (select contraparte, gestion, indicador
       from LN_contraparte_indicadores
       where contraparte = @contraparte
       and gestion = @gestion
       and visible = 1
       and indicador = 384) 
      begin
      
      INSERT INTO LN_contraparte_indicadores
      (contraparte, gestion, indicador, valor_numerico, valor_texto, valor_memo, created )
      VALUES
      (@contraparte, @gestion, '384',@numero,@texto,@texto_largo,GETDATE() )
       
      exec [LN_indicadores_manual_cliente] @contraparte, 'UPDATE','384','NA'
      
      end 
    end
   end

    
  







 end

 if (@accion = 'indicadores') begin

  if (@p_contraparte is not null)

   select LN_indicadores.clave_indicador, ln_productos.producto_id, 
        LN_indicadores.producto, LN_indicadores.indicador, 
     LN_productos.country_code, identificadores.country_code as pais_contraparte,
    ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
    ISNULL( ISNULL(DATEDIFF(DAY, LN_contraparte_indicadores.modified, getdate()), DATEDIFF(DAY, LN_contraparte_indicadores.created, getdate())) , 100) AS dias,

    show = iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0))


   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   -- 6/1/2021
   -- Puede ser que la familia no tenga el producto, pero que el producto sea OBLIGATARIO para todas las familias, 
   -- por eso usamos left join, y despues lo controlamos en el where 
   left join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_cliente_productos.producto = LN_indicadores.producto
   --inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
   -- AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia) 
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador

   left outer join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
          AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
          AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
   
   /*Agregado para que tenga en cuenta la suscripcion*/
   LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
   /**/   
   where LN_contraparte_familias.contraparte = @p_contraparte
   and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   -- 6/1/2021
   AND (LN_familia_productos.activo = 1 or LN_productos.todas_familias = 1) 
   -- Que la familia tenga el producto, o que el producto sea OBLIGATARIO para todas las familias

      /*Agregado para que tenga en cuenta la suscripcion*/
   and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
            or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)
   /**/ 
   and iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0)) = 1
   
   order by LN_cliente_productos.orden_producto, LN_indicadores.orden

 end


 if (@accion = 'indicadores_scores') begin

  if (@p_contraparte is not null)

   select LN_contrapartes.contraparte, LN_indicadores.indicador,
     LN_indicadores.nombre_indicador, LN_indicadores.clave_indicador,
     LN_indicadores.etiqueta as etiqueta_indicador,
     LN_indicadores.producto, LN_productos.nombre_producto,
     LN_productos.producto_id, 
     LN_cliente_productos.ponderacion, 
     LN_productos.etiqueta

   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   -- 6/1/2021
   -- Puede ser que la familia no tenga el producto, pero que el producto sea OBLIGATARIO para todas las familias, 
   -- por eso usamos left join, y despues lo controlamos en el where 
   left join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_cliente_productos.producto = LN_indicadores.producto
   --inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
   -- AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia) 
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador
 
   /*Agregado para que tenga en cuenta la suscripcion*/
   LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
   /**/   
   where LN_contraparte_familias.contraparte = @p_contraparte
   --and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   -- 6/1/2021
   AND (LN_familia_productos.activo = 1 or LN_productos.todas_familias = 1) 
   -- Que la familia tenga el producto, o que el producto sea OBLIGATARIO para todas las familias

      /*Agregado para que tenga en cuenta la suscripcion*/
   and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
            or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)
   /**/ 
   and iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0)) = 1
   -- and clave_indicador like 'SCORE%' and clave_indicador != 'SCORE_FINAL' and ponderacion != 0
   -- 19/04/22:
   and ((clave_indicador like 'SCORE%' and ponderacion != 0) OR  clave_indicador = 'SCORE_FINAL' )


   order by LN_cliente_productos.orden_producto, LN_indicadores.orden
   

 end


 if (@accion = 'indicadores_vrm_score') begin

  if (@p_contraparte is not null)

   select LN_contrapartes.contraparte, LN_indicadores.indicador,
     LN_indicadores.nombre_indicador, LN_indicadores.clave_indicador,
     LN_indicadores.etiqueta as etiqueta_indicador,
     LN_indicadores.producto, LN_productos.nombre_producto,
     LN_productos.producto_id, 
     LN_cliente_productos.ponderacion, 
     LN_productos.etiqueta

   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   -- 6/1/2021
   -- Puede ser que la familia no tenga el producto, pero que el producto sea OBLIGATARIO para todas las familias, 
   -- por eso usamos left join, y despues lo controlamos en el where 
   left join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_cliente_productos.producto = LN_indicadores.producto
   --inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
   -- AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia) 
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador
 
   /*Agregado para que tenga en cuenta la suscripcion*/
   LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
   /**/   
   where LN_contraparte_familias.contraparte = @p_contraparte
   --and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   -- 6/1/2021
   AND (LN_familia_productos.activo = 1 or LN_productos.todas_familias = 1) 
   -- Que la familia tenga el producto, o que el producto sea OBLIGATARIO para todas las familias

      /*Agregado para que tenga en cuenta la suscripcion*/
   and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
            or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)
   /**/ 
   and iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0)) = 1
   and clave_indicador like 'VRM_SCORE%' /*and ponderacion != 0*/
   order by LN_cliente_productos.orden_producto, LN_indicadores.orden
   

 end



 
 if (@accion = 'indicadores_scores_arcor') begin

  if (@p_contraparte is not null)

   select LN_contrapartes.contraparte, LN_indicadores.indicador,
     LN_indicadores.nombre_indicador, LN_indicadores.clave_indicador,
     LN_indicadores.etiqueta as etiqueta_indicador,
     LN_indicadores.producto, LN_productos.nombre_producto,
     LN_productos.producto_id, 
     LN_cliente_productos.ponderacion, 
     LN_productos.etiqueta

   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   -- 6/1/2021
   -- Puede ser que la familia no tenga el producto, pero que el producto sea OBLIGATARIO para todas las familias, 
   -- por eso usamos left join, y despues lo controlamos en el where 
   left join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_cliente_productos.producto = LN_indicadores.producto
   --inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
   -- AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia) 
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador
 
   /*Agregado para que tenga en cuenta la suscripcion*/
   LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
   /**/   
   where LN_contraparte_familias.contraparte = @p_contraparte
   --and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   -- 6/1/2021
   AND (LN_familia_productos.activo = 1 or LN_productos.todas_familias = 1) 
   -- Que la familia tenga el producto, o que el producto sea OBLIGATARIO para todas las familias

      /*Agregado para que tenga en cuenta la suscripcion*/
   and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
            or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)
   /**/ 
   and iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0)) = 1
   and clave_indicador like 'ARCOR_%' /*and ponderacion != 0*/
   order by LN_cliente_productos.orden_producto, LN_indicadores.orden
   

 end








 /*
  if (@accion = 'indicadores_anteriores') begin
 
  if (isnull(@p_contraparte,'0') != 0) 
  begin
  if (exists (select * from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte)) 
  begin
  delete from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte
  end 
  insert into [LN_contraparte_indicadores_trazabilidad] ( contraparte,
  gestion,
  producto,
  indicador,
  clave_indicador,
  anterior_nuevo, 
  actualizado,
  valor_numerico,
  valor_texto,
  valor_memo,
  valor_fecha)
 
  select LN_contrapartes.contraparte, 
  ln_gestiones.gestion, 
  LN_indicadores.producto, LN_indicadores.indicador, 
      LN_indicadores.clave_indicador, 'A', 
  ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
  LN_contraparte_indicadores.valor_numerico,
  LN_contraparte_indicadores.valor_texto,
  LN_contraparte_indicadores.valor_memo,
  LN_contraparte_indicadores.valor_fecha 
 
  from LN_contrapartes 
  inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
  inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
  inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
  and LN_cliente_productos.producto = LN_familia_productos.producto)
  inner join LN_indicadores on LN_familia_productos.producto = LN_indicadores.producto
  inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
  AND LN_cliente_productos.cliente = LN_familias.cliente)
  inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
  inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
  inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
  inner join identificadores on padrones.identificador = identificadores.identificador
 
  inner join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
  AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
  AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
 
  where LN_contraparte_familias.contraparte = @p_contraparte
  and LN_indicadores.valoracion = 'A'
  and LN_cliente_productos.activo = 1
  and LN_familia_productos.activo = 1
  and LN_familias.visible = 1
  and LN_contraparte_familias.activo = 1
  and LN_contraparte_indicadores.visible = 1
  and LN_gestiones.desde <= GETDATE()
  and LN_gestiones.hasta >= GETDATE()
 
  select 'ok' as estado
  end
  else 
  begin
  select 'sin contraparte' as estado
  end 
  end 
 
  if (@accion = 'indicadores_nuevos') begin
 
  if (isnull(@p_contraparte,'0') != 0) 
  begin
 
  if (exists (select * from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte and anterior_nuevo = 'N')) 
  begin
  delete from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte and anterior_nuevo = 'N'
  end
  insert into [LN_contraparte_indicadores_trazabilidad] ( contraparte,
  gestion,
  producto,
  indicador,
  clave_indicador,
  anterior_nuevo, 
  actualizado,
  valor_numerico,
  valor_texto,
  valor_memo,
  valor_fecha)
 
  select LN_contrapartes.contraparte, 
  ln_gestiones.gestion, 
  LN_indicadores.producto, LN_indicadores.indicador, 
      LN_indicadores.clave_indicador, 'N',
  ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
  LN_contraparte_indicadores.valor_numerico,
  LN_contraparte_indicadores.valor_texto,
  LN_contraparte_indicadores.valor_memo,
  LN_contraparte_indicadores.valor_fecha
 
 
  from LN_contrapartes 
  inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
  inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
  inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
  and LN_cliente_productos.producto = LN_familia_productos.producto)
  inner join LN_indicadores on LN_familia_productos.producto = LN_indicadores.producto
  inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
  AND LN_cliente_productos.cliente = LN_familias.cliente)
  inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
  inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
  inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
  inner join identificadores on padrones.identificador = identificadores.identificador
 
  inner join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
  AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
  AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
 
  where LN_contraparte_familias.contraparte = @p_contraparte
  and LN_indicadores.valoracion = 'A'
  and LN_cliente_productos.activo = 1
  and LN_familia_productos.activo = 1
  and LN_familias.visible = 1
  and LN_contraparte_familias.activo = 1
  and LN_contraparte_indicadores.visible = 1
  and LN_gestiones.desde <= GETDATE()
  and LN_gestiones.hasta >= GETDATE()
 
  declare @created datetime = getdate()
  insert into trazabilidad(texto, cliente, accion, id_plataforma, contraparte, user_id, created, 
  fecha_old, 
  valor_numerico_old, 
  valor_texto_old, 
  valor_memo_old, 
  valor_fecha_old, 
  fecha_new, 
  valor_numerico_new,
  valor_texto_new,
  valor_memo_new,
  valor_fecha_new) 
  select  'Cambio ' + LN_indicadores.nombre_indicador  as texto, 
  LN_contrapartes.cliente as cliente, 
  upper(LN_indicadores.clave_indicador) as accion, 
  'INDICADOR' as id_plataforma, 
  a.contraparte as contraparte, 
  null as user_id, 
  @created as created, 
  b.actualizado    as fecha_old, 
  b.valor_numerico as valor_numerico_old, 
  b.valor_texto    as valor_texto_old, 
  b.valor_memo     as valor_memo_old, 
  b.valor_fecha    as valor_fecha_old, 
  a.actualizado    as fecha_new, 
  a.valor_numerico as valor_numerico_new,
  a.valor_texto    as valor_texto_new,
  a.valor_memo     as valor_memo_new,
  a.valor_fecha    as valor_fecha_new 
 
  from [LN_contraparte_indicadores_trazabilidad] a  -- nuevo
  inner join [LN_contraparte_indicadores_trazabilidad] b -- anterior 
   on (b.contraparte   = a.contraparte
   and b.gestion   = a.gestion 
   and b.producto  = a.producto 
   and b.indicador = a.indicador) 
  inner join LN_indicadores on LN_indicadores.indicador = a.indicador and LN_indicadores.producto = a.producto 
  inner join LN_contrapartes on LN_contrapartes.contraparte = a.contraparte    
  where a.contraparte = @p_contraparte
    and a.anterior_nuevo = 'N' 
    and b.anterior_nuevo = 'A'
    and (
    ((b.valor_numerico is not null and a.valor_numerico is null) or (b.valor_numerico is null and a.valor_numerico is not null) or  b.valor_numerico != a.valor_numerico)
    or 
    ((b.valor_texto is not null and a.valor_texto is null) or (b.valor_texto is null and a.valor_texto is not null) or b.valor_texto != a.valor_texto)
    or 
    ((b.valor_fecha is not null and a.valor_fecha is null) or (b.valor_fecha is null and a.valor_fecha is not null) or b.valor_fecha != a.valor_fecha)
    or 
    ((b.valor_memo is not null and a.valor_memo is null) or (b.valor_memo is null and a.valor_memo is not null) or convert(varchar(max),b.valor_memo) != convert(varchar(max),a.valor_memo))
    )
  select 'ok' as estado, 
  ln_contrapartes.cliente, 
  padrones.identificacion as cuit, 
  texto as texto, 
  accion as accion,  
  convert(varchar,fecha_old, 103) as fecha_old, 
  valor_numerico_old, 
  valor_texto_old, 
  valor_memo_old, 
  valor_fecha_old, 
  convert(varchar,fecha_new, 103) as fecha_new, 
  valor_numerico_new,
  valor_texto_new,
  valor_memo_new,
  valor_fecha_new
   from trazabilidad
   inner join LN_contrapartes on LN_contrapartes.contraparte = trazabilidad.contraparte
   inner join padrones on padrones.id_padron = LN_contrapartes.id_padron
   where trazabilidad.contraparte   =  @p_contraparte  
     and trazabilidad.created       = @created
     and trazabilidad.id_plataforma = 'INDICADOR'
  end
  else 
  begin
  select 'sin contraparte' as estado
  end 
  end 
  */


 
 declare @killer table (contraparte int, gestion int, detalle varchar(max))
 declare @puntos table (contraparte int, gestion int, detalle varchar(max))

 if (@accion = 'indicadores_anteriores') begin

  if (isnull(@p_contraparte,'0') != 0) 
  begin
   delete from @killer 
   delete from @puntos 
   insert into @killer exec LN_score_detalle_killer_ @p_contraparte
   insert into @puntos exec LN_score_detalle_puntos_ @p_contraparte

   --select * from @puntos 

   if (exists (select * from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte)) 
   begin
    delete from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte
   end 
   insert into [LN_contraparte_indicadores_trazabilidad] ( contraparte,
                 gestion,
                 producto,
                 indicador,
                 clave_indicador,
                 anterior_nuevo, 
                 actualizado,
                 valor_numerico,
                 valor_texto,
                 valor_memo,
                 valor_fecha,
                 detalle_killer,
                 detalle_puntos)

   select LN_contrapartes.contraparte, 
    ln_gestiones.gestion, 
    LN_indicadores.producto, LN_indicadores.indicador, 
       LN_indicadores.clave_indicador, 'A', 
    ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
    LN_contraparte_indicadores.valor_numerico,
    LN_contraparte_indicadores.valor_texto,
    LN_contraparte_indicadores.valor_memo,
    LN_contraparte_indicadores.valor_fecha, 
    /*killer.detalle_killer, 
     puntos.detalle
     */

    iif(LN_indicadores.clave_indicador='SCORE_FINAL',killerSF.detalle,killer.detalle_killer) as detalle_killer,
    iif(LN_indicadores.clave_indicador='SCORE_FINAL',puntosSF.detalle,puntos.detalle) as detalle
   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_familia_productos.producto = LN_indicadores.producto
   inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
          AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador

   inner join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
          AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
          AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
   left join ln_score_detalle_killer killer on (killer.contraparte = ln_contrapartes.contraparte
                                                and 
               killer.gestion = ln_gestiones.gestion
               and 
               killer.indicador = LN_contraparte_indicadores.indicador
               and 
               killer.visible = 1) 
   left join ln_score_detalle_puntos puntos on (puntos.contraparte = ln_contrapartes.contraparte
                                                and 
               puntos.gestion = ln_gestiones.gestion
               and 
               puntos.indicador = LN_contraparte_indicadores.indicador
               and 
               puntos.visible = 1) 
   left join @killer killerSF on killerSF.contraparte = ln_contrapartes.contraparte
   left join @puntos puntosSF on puntosSF.contraparte = ln_contrapartes.contraparte


   where LN_contraparte_familias.contraparte = @p_contraparte
   and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familia_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_contraparte_indicadores.visible = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   select 'ok' as estado
  end
  else 
  begin
   select 'sin contraparte' as estado
  end 
 end 

 if (@accion = 'indicadores_nuevos') begin
 
  if (isnull(@p_contraparte,'0') != 0) 
  begin
   delete from @killer 
   delete from @puntos 
   insert into @killer exec LN_score_detalle_killer_ @p_contraparte
   insert into @puntos exec LN_score_detalle_puntos_ @p_contraparte
   
   --select * from @puntos 

   if (exists (select * from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte and anterior_nuevo = 'N')) 
   begin
    delete from [LN_contraparte_indicadores_trazabilidad] where contraparte = @p_contraparte and anterior_nuevo = 'N'
   end
   insert into [LN_contraparte_indicadores_trazabilidad] ( contraparte,
                 gestion,
                 producto,
                 indicador,
                 clave_indicador,
                 anterior_nuevo, 
                 actualizado,
                 valor_numerico,
                 valor_texto,
                 valor_memo,
                 valor_fecha,
                 detalle_killer,
                 detalle_puntos)

   select LN_contrapartes.contraparte, 
    ln_gestiones.gestion, 
    LN_indicadores.producto, LN_indicadores.indicador, 
       LN_indicadores.clave_indicador, 'N',
    ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
    LN_contraparte_indicadores.valor_numerico,
    LN_contraparte_indicadores.valor_texto,
    LN_contraparte_indicadores.valor_memo,
    LN_contraparte_indicadores.valor_fecha,
    /*killer.detalle_killer, 
     puntos.detalle
     */

    iif(LN_indicadores.clave_indicador='SCORE_FINAL',killerSF.detalle,killer.detalle_killer) as detalle_killer,
    iif(LN_indicadores.clave_indicador='SCORE_FINAL',puntosSF.detalle,puntos.detalle) as detalle


   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_familia_productos.producto = LN_indicadores.producto
   inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
          AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador

   inner join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
          AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
          AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
            left join ln_score_detalle_killer killer on (killer.contraparte = ln_contrapartes.contraparte
                                                and 
               killer.gestion = ln_gestiones.gestion
               and 
               killer.indicador = LN_contraparte_indicadores.indicador
               and 
               killer.visible = 1) 
   left join ln_score_detalle_puntos puntos on (puntos.contraparte = ln_contrapartes.contraparte
                                                and 
               puntos.gestion = ln_gestiones.gestion
               and 
               puntos.indicador = LN_contraparte_indicadores.indicador
               and 
               puntos.visible = 1) 
   left join @killer killerSF on killerSF.contraparte = ln_contrapartes.contraparte
   left join @puntos puntosSF on puntosSF.contraparte = ln_contrapartes.contraparte

   where LN_contraparte_familias.contraparte = @p_contraparte
   and LN_indicadores.valoracion = 'A'
   and LN_cliente_productos.activo = 1
   and LN_familia_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_contraparte_indicadores.visible = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()

   union all 

   select LN_contrapartes.contraparte, 
    ln_gestiones.gestion, 
    LN_indicadores.producto, LN_indicadores.indicador, 
       LN_indicadores.clave_indicador, 'N',
    ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
    LN_contraparte_indicadores.valor_numerico,
    LN_contraparte_indicadores.valor_texto,
    LN_contraparte_indicadores.valor_memo,
    LN_contraparte_indicadores.valor_fecha,
    null,
    null


   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   inner join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_familia_productos.producto = LN_indicadores.producto
   inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
          AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador

   inner join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
          AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
          AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)

   where LN_contraparte_familias.contraparte = @p_contraparte
   and LN_indicadores.valoracion in ('F','C')
   and LN_cliente_productos.activo = 1
   and LN_familia_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_contraparte_indicadores.visible = 1
   and LN_contraparte_indicadores.modified >= getdate()-700
   and not exists (select * from trazabilidad where contraparte = @p_contraparte 
                                                and id_plataforma = 'INDICADOR' 
               and accion = upper(LN_indicadores.clave_indicador)
               and created >= LN_contraparte_indicadores.modified)
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   
   declare @created datetime = getdate()
   insert into trazabilidad(texto, cliente, accion, id_plataforma, contraparte, user_id, created, 
         fecha_old, 
         valor_numerico_old, 
         valor_texto_old, 
         valor_memo_old, 
         valor_fecha_old, 
         detalle_killer_old,
         detalle_puntos_old,
         fecha_new, 
         valor_numerico_new,
         valor_texto_new,
         valor_memo_new,
         valor_fecha_new,
         detalle_killer_new,
         detalle_puntos_new)
         
   select  'Cambio ' + LN_indicadores.nombre_indicador  as texto, 
     LN_contrapartes.cliente as cliente, 
     upper(LN_indicadores.clave_indicador) as accion, 
     'INDICADOR' as id_plataforma, 
     a.contraparte as contraparte, 
     null as user_id, 
     @created as created, 
     b.actualizado    as fecha_old, 
     b.valor_numerico as valor_numerico_old, 
     b.valor_texto    as valor_texto_old, 
     b.valor_memo     as valor_memo_old, 
     b.valor_fecha    as valor_fecha_old,
     b.detalle_killer as detalle_killer_old,
     b.detalle_puntos as detalle_puntos_old,
     a.actualizado    as fecha_new, 
     a.valor_numerico as valor_numerico_new,
     a.valor_texto    as valor_texto_new,
     a.valor_memo     as valor_memo_new,
     a.valor_fecha    as valor_fecha_new ,
     a.detalle_killer as detalle_killer_new,
     a.detalle_puntos as detalle_puntos_new

    from [LN_contraparte_indicadores_trazabilidad] a  -- nuevo
    left join [LN_contraparte_indicadores_trazabilidad] b -- anterior 
                  on (b.contraparte   = a.contraparte
                  and b.gestion   = a.gestion 
                  and b.producto  = a.producto 
                  and b.indicador = a.indicador) 
    inner join LN_indicadores on LN_indicadores.indicador = a.indicador and LN_indicadores.producto = a.producto 
    inner join LN_contrapartes on LN_contrapartes.contraparte = a.contraparte                
    where a.contraparte = @p_contraparte
      and a.anterior_nuevo = 'N' 
      and isnull(b.anterior_nuevo,'A') = 'A'
      and (
      ((b.valor_numerico is not null and a.valor_numerico is null) or (b.valor_numerico is null and a.valor_numerico is not null) or  b.valor_numerico != a.valor_numerico)
      or 
      ((b.valor_texto is not null and a.valor_texto is null) or (b.valor_texto is null and a.valor_texto is not null) or b.valor_texto != a.valor_texto)
      or 
      ((b.valor_fecha is not null and a.valor_fecha is null) or (b.valor_fecha is null and a.valor_fecha is not null) or b.valor_fecha != a.valor_fecha)
      or 
      ((b.valor_memo is not null and a.valor_memo is null) or (b.valor_memo is null and a.valor_memo is not null) or convert(varchar(max),b.valor_memo) != convert(varchar(max),a.valor_memo))
      )


    select 'ok' as estado, 
      ln_contrapartes.cliente, 
      padrones.identificacion as cuit, 
      texto as texto, 
      accion as accion,  
      convert(varchar,fecha_old, 103) as fecha_old, 
      valor_numerico_old, 
      valor_texto_old, 
      valor_memo_old, 
      valor_fecha_old, 
      detalle_killer_old,
      detalle_puntos_old,
      convert(varchar,fecha_new, 103) as fecha_new, 
      valor_numerico_new,
      valor_texto_new,
      valor_memo_new,
      valor_fecha_new,
      detalle_killer_new,
      detalle_puntos_new
     from trazabilidad
     inner join LN_contrapartes on LN_contrapartes.contraparte = trazabilidad.contraparte
     inner join padrones on padrones.id_padron = LN_contrapartes.id_padron
     where trazabilidad.contraparte   =  @p_contraparte  
       and trazabilidad.created       = @created
       and trazabilidad.id_plataforma = 'INDICADOR'
  end
  else 
  begin
   select 'sin contraparte' as estado
  end 
 end 


 -- Dada la contraparte, clave indicador, familia guarda en la tabla contraparte_indicadores el dato de la famillia a la que pertenecía al momento de ser calculado el indicador.
 if(@accion = 'actualizar_familia') begin
  if (@p_contraparte is not null AND @p_clave_indicador is not null AND @p_familia is not null) begin
   update LN_contraparte_indicadores set familia = @p_familia
   from LN_contraparte_indicadores
   inner join LN_indicadores on LN_contraparte_indicadores.indicador = LN_indicadores.indicador
   inner join LN_gestiones on (LN_contraparte_indicadores.contraparte = LN_gestiones.contraparte
          and LN_contraparte_indicadores.gestion = LN_gestiones.gestion)
   where LN_indicadores.clave_indicador = @p_clave_indicador
   and LN_contraparte_indicadores.contraparte = @p_contraparte
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
  end
 end
 
 declare @indicador int = null 
 declare @indicadores table (clave_indicador varchar(100),
        prod varchar(50),
                          producto int,  
        indicador int, country_code varchar(10), 
        pais_contratante varchar(100), actualizado datetime, 
        dias int, show int)

 /* 18/03/2022: Se agregan 2 acciones 
  'indicadores_manuales': Busca si la contraparte tienen indicadores no automáticos
  'completa_indicadores': Si algún indicador que se muestra en el panel (en la tabla LN_indicadores visible = 1) 
                          no está en la tabla ln_contraparte_indicadores lo inserta con los valores nulos
  Esto es para que si aún no se puede calcular, el registro esté (y lo mostremos en el panel, como aún no calculado)
  Si al calcularlo obtiene valor va a hacer el update de ese mismo registro
  */

 if (@accion = 'indicadores_manuales' and @p_contraparte is not null ) begin

   select LN_indicadores.clave_indicador, ln_productos.producto_id, 
        LN_indicadores.producto, LN_indicadores.indicador, 
     LN_productos.country_code, identificadores.country_code as pais_contraparte,
    ISNULL(LN_contraparte_indicadores.modified, LN_contraparte_indicadores.created) AS actualizado,
    ISNULL( ISNULL(DATEDIFF(DAY, LN_contraparte_indicadores.modified, getdate()), DATEDIFF(DAY, LN_contraparte_indicadores.created, getdate())) , 100) AS dias,

    show = iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0))


   from LN_contrapartes 
   inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
   inner join LN_cliente_productos on LN_contrapartes.cliente = LN_cliente_productos.cliente
   -- 6/1/2021
   -- Puede ser que la familia no tenga el producto, pero que el producto sea OBLIGATARIO para todas las familias, 
   -- por eso usamos left join, y despues lo controlamos en el where 
   left join LN_familia_productos on (LN_contraparte_familias.familia = LN_familia_productos.familia
            and LN_cliente_productos.producto = LN_familia_productos.producto)
   inner join LN_indicadores on LN_cliente_productos.producto = LN_indicadores.producto
   --inner join LN_familias on (LN_familia_productos.familia = LN_familias.familia
   -- AND LN_cliente_productos.cliente = LN_familias.cliente)
   inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia) 
   inner join LN_productos on LN_cliente_productos.producto = LN_productos.producto
   inner join LN_gestiones on LN_contrapartes.contraparte = LN_gestiones.contraparte
   inner join padrones on LN_contrapartes.id_padron = padrones.id_padron
   inner join identificadores on padrones.identificador = identificadores.identificador

   left outer join LN_contraparte_indicadores on (LN_contrapartes.contraparte = LN_contraparte_indicadores.contraparte
          AND LN_indicadores.indicador = LN_contraparte_indicadores.indicador
          AND LN_gestiones.gestion = LN_contraparte_indicadores.gestion)
   
   /*Agregado para que tenga en cuenta la suscripcion*/
   LEFT OUTER JOIN (SELECT cliente, indicador FROM LN_cliente_indicadores
      ) SUSC
         ON (SUSC.cliente = ln_contrapartes.cliente AND SUSC.indicador = LN_indicadores.indicador) 
   /**/   
   where LN_contraparte_familias.contraparte = @p_contraparte
   and LN_indicadores.valoracion != 'A'
   and LN_cliente_productos.activo = 1
   and LN_familias.visible = 1
   and LN_contraparte_familias.activo = 1
   and LN_gestiones.desde <= GETDATE()
   and LN_gestiones.hasta >= GETDATE()
   -- 6/1/2021
   AND (LN_familia_productos.activo = 1 or LN_productos.todas_familias = 1) 
   -- Que la familia tenga el producto, o que el producto sea OBLIGATARIO para todas las familias

      /*Agregado para que tenga en cuenta la suscripcion*/
   and ((ISNULL(LN_productos.suscribe_indicadores, 0) > 0 and SUSC.indicador IS NOT NULL)
            or ISNULL(LN_productos.suscribe_indicadores, 0) = 0)
   /**/ 
   and iif(LN_productos.country_code IS NULL, 1, iif(LN_productos.country_code = identificadores.country_code, 1, 0)) = 1
   
   order by LN_cliente_productos.orden_producto, LN_indicadores.orden

 end


 if(@accion = 'completa_indicadores' and @p_contraparte is not null ) begin
  insert into @indicadores 
   exec LN_contrapartes_queue_ 'indicadores', NULL, @p_contraparte
  insert into @indicadores 
   exec LN_contrapartes_queue_ 'indicadores_manuales', NULL, @p_contraparte

  INSERT INTO LN_contraparte_indicadores
   (contraparte, gestion, indicador, visible, created,familia)
   select G.contraparte, G.gestion, I.indicador, 1, GETDATE(), F.familia
     from LN_gestiones G
       inner join @indicadores I on 1=1
       inner join LN_contraparte_familias F on (F.contraparte = G.contraparte and F.activo = 1) 
       inner join LN_indicadores IND on (IND.indicador = I.indicador and IND.visible = 1) 
    where G.contraparte = @p_contraparte
    and G.desde <= GETDATE()
    and G.hasta >= GETDATE()
    and G.vigente = 1
    and not exists (SELECT indicador
        FROM LN_contraparte_indicadores CI
       WHERE CI.indicador = I.indicador
         AND CI.contraparte = @p_contraparte
         AND CI.gestion = G.gestion
         AND CI.visible = 1)
 end
 /* Fin 18/03/2022 */


 -- si en la tabla ln_contraparte_indicadores hay indicadores de calculo automatico que ya no le corresponden, 
 -- lo pasa como no visible 
 -- O si no son de la familia actual, lo pasa a no visible 
 if(@accion = 'indicadores_novisibles' and @p_contraparte is not null ) begin

  -- Que no sean de la familia actual:

  update LN_contraparte_indicadores set visible = 0, modified = GETDATE() 
    where contraparte = @p_contraparte 
      and gestion in ( select G.gestion from LN_gestiones G 
                           where G.contraparte = @p_contraparte 
                 and G.desde <= GETDATE()
                 and G.hasta >= GETDATE())
      and familia not in (select F.familia from ln_contraparte_familias F
                            where F.contraparte = @p_contraparte and F.activo = 1)
      and (select valoracion from LN_indicadores 
            where indicador = ln_contraparte_indicadores.indicador) = 'A'


  -- Que sean indicadores que ya no le corresponden:
 
  insert into @indicadores 
   exec LN_contrapartes_queue_ 'indicadores', NULL, @p_contraparte
   
  DECLARE C_Ind CURSOR FOR
    select distinct CI.gestion, CI.indicador 
      from LN_contraparte_indicadores CI
         inner join LN_gestiones G on (G.contraparte = CI.contraparte and G.gestion = CI.gestion)
         inner join LN_Indicadores I on I.indicador = CI.indicador 
      where CI.contraparte = @p_contraparte 
      and G.desde <= GETDATE()
      and G.hasta >= GETDATE()
      and I.valoracion = 'A'
      and CI.visible = 1 
      and CI.indicador not in (select indicador from @indicadores)

  OPEN C_Ind
  FETCH NEXT FROM C_Ind INTO @gestion, @indicador 
  WHILE @@fetch_status = 0
  BEGIN 
   update LN_contraparte_indicadores set visible = 0, modified = GETDATE() 
    where contraparte = @p_contraparte 
      and gestion = @gestion 
      and indicador = @indicador 
   FETCH NEXT FROM C_Ind INTO @gestion, @indicador 
  END 
  CLOSE C_Ind
  DEALLOCATE C_Ind

 end

 -- si en la tabla ln_contraparte_indicadores hay indicadores de calculo automatico que ya no le corresponden, 
 -- lo borra 
 -- O si no son de la familia actual, tambien los borra
 -- Si tiene indicadores que estaban en visible = 0, tambien los borra
 -- Los borramos para que llegado el caso que haya que calcularlos nuevamente, 
 -- no de conficto de clave duplicada por contraparte - gestion - indicador 
 if(@accion = 'indicadores_delete' and @p_contraparte is not null ) begin

  -- Que esten como no visibles:
     delete from LN_contraparte_indicadores 
    where contraparte = @p_contraparte 
      and gestion in ( select G.gestion from LN_gestiones G 
                           where G.contraparte = @p_contraparte 
                 and G.desde <= GETDATE()
                 and G.hasta >= GETDATE())
      and visible = 0
      and (select valoracion from LN_indicadores 
            where indicador = ln_contraparte_indicadores.indicador) = 'A'

  -- Que no sean de la familia actual:

  -- update LN_contraparte_indicadores set visible = 0, modified = GETDATE() 
      delete from LN_contraparte_indicadores 
    where contraparte = @p_contraparte 
      and gestion in ( select G.gestion from LN_gestiones G 
                           where G.contraparte = @p_contraparte 
                 and G.desde <= GETDATE()
                 and G.hasta >= GETDATE())
      and familia not in (select F.familia from ln_contraparte_familias F
                            where F.contraparte = @p_contraparte and F.activo = 1)
      and (select valoracion from LN_indicadores 
            where indicador = ln_contraparte_indicadores.indicador) = 'A'
  
  -- Que sean indicadores que ya no le corresponden:
 
  insert into @indicadores 
   exec LN_contrapartes_queue_ 'indicadores', NULL, @p_contraparte
   
  DECLARE C_Ind CURSOR FOR
    select distinct CI.gestion, CI.indicador 
      from LN_contraparte_indicadores CI
         inner join LN_gestiones G on (G.contraparte = CI.contraparte and G.gestion = CI.gestion)
         inner join LN_Indicadores I on I.indicador = CI.indicador 
      where CI.contraparte = @p_contraparte 
      and G.desde <= GETDATE()
      and G.hasta >= GETDATE()
      and I.valoracion = 'A'
      and CI.visible = 1 
      and CI.indicador not in (select indicador from @indicadores)

  OPEN C_Ind
  FETCH NEXT FROM C_Ind INTO @gestion, @indicador 
  WHILE @@fetch_status = 0
  BEGIN 
   --update LN_contraparte_indicadores set visible = 0, modified = GETDATE() 
   delete from LN_contraparte_indicadores 
    where contraparte = @p_contraparte 
      and gestion = @gestion 
      and indicador = @indicador 
   FETCH NEXT FROM C_Ind INTO @gestion, @indicador 
  END 
  CLOSE C_Ind
  DEALLOCATE C_Ind

 end



END

GO

Used By

No items found