dbo.LN_indicadores_autocompletar_

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

1
Name Data Type Length Description
@contraparte int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
Indicador   clave_indicador 
415 Geografía de origen del proveedor - RA_geografia_origen  -> Poner el valor según la tabla geografia_proveedor
416 Estructura del proveedor - RA_Estructura_proveedor  -> Poner el valor de la gestión anterior
417 Industria (actividad) - RA_Industria  -> Poner el valor de la gestión anterior
418 Materialidad del proveedor - RA_Materialidad_proveedor  -> Poner el valor según el valor de compras cargado en la tabla LN_dep_econ_compras
495 Clasificación empresa - SOS_CLASIFICACION  -> Poner el valor de la gestión anterior

insert into LN_indicadores_autocompletar values (1226057645, 47, 415, 0, 'geografia_proveedor')
insert into LN_indicadores_autocompletar values (1226057645, 47, 416, 1, null)
insert into LN_indicadores_autocompletar values (1226057645, 47, 417, 1, null)
insert into LN_indicadores_autocompletar values (1226057645, 47, 418, 0, 'LN_dep_econ_compras')
insert into LN_indicadores_autocompletar values (1226057645, 47, 495, 1, null)

Geografia del proveedor, Florencia nos informó que Argentina es 38. 
Si cambia hay o aparecen otros paises hay que cambiarlo o cargarlo en la tabla geografia_proveedor
insert into geografia_proveedor values (1226057645, 'AR', 38)

[LN_indicadores_autocompletar_] 144853


*/


CREATE OR ALTER PROCEDURE dbo.LN_indicadores_autocompletar_
  @contraparte int 
AS
BEGIN
 SET NOCOUNT ON;
 declare @ind int 
 declare @prod int 
 declare @clave_indicador varchar(100)
 declare @tabla varchar(100)

 declare @cliente int 
 declare @familia int 
 declare @pais varchar(2)
 declare @servicio_contratado int 
 declare @gestion int = null, @gestion_ant int = null 
 declare @cuit varchar(100)

 declare @valor_numerico float, 
   @valor_texto    varchar(max),
   @valor_fecha    date,
   @valor_memo     varchar(max),
   @valor int 
   
 select @cliente = ln_contrapartes.cliente, @gestion = gestion, @familia = familia, 
        @cuit = identificacion, @pais = LN_contrapartes.country_code, @servicio_contratado = ln_contrapartes.servicio_contratado
   from ln_contrapartes 
   inner join LN_gestiones on LN_gestiones.contraparte = LN_contrapartes.contraparte
      INNER JOIN LN_contraparte_familias ON (LN_contraparte_familias.contraparte = LN_contrapartes.contraparte AND 
                                           LN_contraparte_familias.activo = 1)
   inner join padrones on padrones.id_padron = LN_contrapartes.id_padron
   where ln_contrapartes.contraparte = @contraparte
     and LN_gestiones.vigente = 1 and LN_gestiones.desde <= GETDATE() and LN_gestiones.hasta >= GETDATE()

 select @gestion_ant = max(gestion)
   from LN_gestiones 
   where LN_gestiones.contraparte = @contraparte
     and gestion < @gestion 

 DECLARE C_Cursor CURSOR FOR
  SELECT LN_indicadores.indicador, LN_indicadores.producto, LN_indicadores.clave_indicador
    FROM LN_contrapartes  
    INNER JOIN LN_cliente_indicadores  ON (LN_cliente_indicadores.cliente = LN_contrapartes.cliente AND 
                LN_cliente_indicadores.activo = 1) 
    INNER JOIN LN_indicadores ON (LN_indicadores.indicador = LN_cliente_indicadores.indicador)
    INNER JOIN LN_cliente_productos ON (LN_cliente_productos.cliente = LN_contrapartes.cliente AND
             LN_cliente_productos.producto = LN_indicadores.producto AND 
             LN_cliente_productos.activo = 1)
    INNER JOIN LN_productos   ON (LN_productos.producto = LN_cliente_productos.producto AND 
                                  LN_productos.visible = 1)
    INNER JOIN LN_contraparte_familias ON (LN_contraparte_familias.contraparte = LN_contrapartes.contraparte AND 
                                           LN_contraparte_familias.activo = 1)
    INNER JOIN LN_familia_productos ON (LN_familia_productos.familia  = LN_contraparte_familias.familia and 
                                        LN_familia_productos.producto = LN_cliente_productos.producto and 
             LN_familia_productos.activo = 1)
    WHERE LN_contrapartes.contraparte = @contraparte
    AND LN_indicadores.indicador in (select indicador from LN_indicadores_autocompletar i where i.cliente = LN_contrapartes.cliente and i.servicio_contratado = @servicio_contratado) 

 OPEN C_Cursor
 FETCH NEXT FROM C_Cursor INTO @ind, @prod, @clave_indicador 
 WHILE @@fetch_status = 0
 BEGIN 
 /* Si el indicador está vacio o con todos sus valores nulos, busco valor a completar */
  if not exists (select * from LN_contraparte_indicadores where contraparte = @contraparte and indicador = @ind and gestion = @gestion 
       and (valor_texto is not null or valor_numerico is not null or valor_fecha is not null or valor_memo is not null)) 
  begin
   set @valor_numerico = null
   set @valor_texto    = null
   set @valor_fecha    = null
   set @valor_memo     = null

   -- 1) Completar con gestion anterior
   if (select completar_gestion_anterior from LN_indicadores_autocompletar where cliente = @cliente and indicador = @ind) = 1
   begin
    select @valor_numerico = valor_numerico, 
        @valor_texto    = valor_texto,
        @valor_fecha    = valor_fecha,
        @valor_memo     = valor_memo
      from LN_contraparte_indicadores 
     where contraparte = @contraparte and indicador = @ind and gestion = @gestion_ant and visible = 1
   end 

   else 
   
   begin
   -- 2) Completar según tabla 
    set @tabla = null 
    select @tabla = completar_con_tabla from LN_indicadores_autocompletar where cliente = @cliente and indicador = @ind
    if (@tabla = 'LN_dep_econ_compras') 
    begin
     declare @mes date,
       @compras money,
       @cotizacion decimal(20,2) = 1,
       @moneda  varchar(3) 
    
     SELECT top 1 @mes     = hasta, 
         @compras = SUM(ISNULL(total_compras,0)),
         @moneda  =  moneda
       FROM LN_dep_econ_compras
       where (contraparte = @contraparte or (cliente = @cliente and identificacion = @cuit))
       and visible = 1
       group by hasta, moneda
       order by hasta desc
     if (@moneda = 'ARS')
     begin
      select top 1 @cotizacion = rate_eur 
       from cotizaciones 
       where currency_code = 'ARS' and convert(DATE,fecha_cotizacion) <= @mes 
       order by fecha_cotizacion desc
     end 
     if (@compras is not null)
     begin
      set @compras = @compras / isnull(@cotizacion,1) 
      if ( @compras <= 100000 ) set @valor_texto = 'B'
      if ( @compras > 100000 and @compras < 5000000) set @valor_texto = 'M'
      if ( @compras >= 5000000 ) set @valor_texto = 'A'
      EXEC [dbo].[LN_indicadores_opciones] @ind, @valor_texto, @valor_memo output
     end
    end 
    if (@tabla = 'geografia_proveedor') 
    begin

     set @valor = null 
     SELECT top 1 @valor = valor
       FROM geografia_proveedor
       where cliente = @cliente and country_code = @pais 

     if (@valor is not null)
     begin
      if ( @valor <= 35 ) set @valor_texto = 'A'
      if ( @valor > 35 and @valor < 50) set @valor_texto = 'M'
      if ( @valor >= 50 ) set @valor_texto = 'B'

      EXEC [dbo].[LN_indicadores_opciones] @ind, @valor_texto, @valor_memo output
     end 
    end 
   end

   /*
    select @ind, @clave_indicador, @valor_numerico, 
    @valor_texto,
    @valor_fecha,
    @valor_memo
    */
 
      
   if (@valor_numerico is not null or 
    @valor_texto    is not null or 
    @valor_fecha    is not null or 
    @valor_memo     is not null )
   begin

    if exists (select * from LN_contraparte_indicadores where contraparte = @contraparte and indicador = @ind and gestion = @gestion)
     begin
      update LN_contraparte_indicadores 
      set valor_numerico = @valor_numerico, 
       valor_texto    = @valor_texto,
       valor_fecha    = @valor_fecha,
       valor_memo     = @valor_memo
      where contraparte = @contraparte and indicador = @ind and gestion = @gestion
     end 
    else 
     begin
      insert into LN_contraparte_indicadores(contraparte,gestion,indicador,valor_numerico,valor_texto,valor_fecha,valor_memo,familia,visible) 
      values (@contraparte, @gestion, @ind, @valor_numerico, @valor_texto, @valor_fecha, @valor_memo, @familia, 1) 
     end

    -- Cuando es 495 Clasificación empresa - SOS_CLASIFICACION, tiene que disparar el documento de Sostenibilidad que corresponda
    if (@ind = '495' and @valor_texto is not null)
    begin
     declare @txt varchar(200) = 'SOSTENIBILIDAD-' + @valor_texto
     declare @p_user_id int = (select user_id from users where username = 'sistemas')
      EXEC LN_contraparte_sub_docs 'ALTA', @contraparte, @p_user_id, 1, @txt, 1 
    end
     
   end
   
  
  end
  FETCH NEXT FROM C_Cursor INTO @ind, @prod, @clave_indicador 
 END  
 CLOSE C_Cursor
 DEALLOCATE C_Cursor
END 

/*
CREATE TABLE [dbo].[LN_indicadores_autocompletar](
cliente int  null, 
servicio_contratado int null, 
[indicador] [int]  NULL,
[completar_gestion_anterior] bit NULL,
[completar_con_tabla] varchar(200) NULL
) ON [PRIMARY]


CREATE TABLE [dbo].[geografia_proveedor](
cliente int not null, 
country_code varchar(2) null,
valor [int]  NULL
) ON [PRIMARY]
*/

GO