dbo.LN_Cumplimiento_meses_anteriores

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

6
Name Data Type Length Description
@p_contraparte int 4
@p_contratista int 4
@p_puntos decimal 5
@p_estado varchar -1
@p_estado_txt varchar -1
@p_color varchar 20

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO

/*
select * from LED_Cumplimiento_historico

insert into LED_Cumplimiento_historico (cliente, tipo_doc, cant_meses, peso) 
values (2046807993 ,376,12, 0)
*/



-- ===============================================================
-- Author: Marita Soria
-- Create date: 30/09/2021
-- Description: Indicador de Imperium - Cumplimiento meses anteriores 
-- DEBE ESTAR CARGADO EN LA TABLA LED_CUMPLIMIENTO_HISTORICO, PARA EL CLIENTE, LOS DOCUMENTOS A TOMAR, CUANTOS MESES Y PESO !!!
-- ===============================================================
/*
select * from LED_CUMPLIMIENTO_HISTORICO

declare @p_puntos_cum int = null, 
@p_estado_cum varchar(max) = null , 
@p_estado_txt_cum varchar(max) = null , 
@p_color_cum varchar(20) = null 
exec [LN_Cumplimiento_meses_anteriores]   145515 , 
null ,
@p_puntos_cum output, 
@p_estado_cum output, 
@p_estado_txt_cum output, 
@p_color_cum output
select  @p_puntos_cum , 
@p_estado_cum, 
@p_estado_txt_cum,
@p_color_cum 



select estado_doc,* from led_docs where contratista = 6093 and periodo >= '202011' and tipo_doc in 
(2,1032,1033,645,648,374,1013,1010)
order by tipo_doc, periodo

select periodo, * from led_docs where contratista = 6089 and tipo_doc = 645
*/


CREATE OR ALTER PROCEDUREdbo.LN_Cumplimiento_meses_anteriores -- Hay que mandar como parametro contraparte, o contratista 
 @p_contraparte int, 
 @p_contratista int = null, 
 @p_puntos decimal(5,2) = null output, 
 @p_estado varchar(max) = null output, 
 @p_estado_txt varchar(max) = null output, 
 @p_color varchar(20) = null output
AS
BEGIN

 SET NOCOUNT ON;

 declare @p_cliente int 

 if (@p_contraparte is null) 
  select @p_contraparte = contraparte, 
      @p_cliente = cliente 
    from ln_contrapartes 
   where id_imperium = @p_contratista
     and activo = 1 

 select @p_contratista = id_imperium, 
     @p_cliente = cliente 
     from ln_contrapartes 
 where contraparte = @p_contraparte


 --select  @p_cliente as cliente, @p_contratista contratista 
 
 set @p_puntos = null 
 declare @periodo_hasta int = (select dbo.PeriodoVencido())
 declare @periodo_hasta1 date = null
 declare @periodo_desde1 date = null
 declare @periodo_desde int = null
 declare @tipo_doc int, @cant_meses int, @peso decimal(5,2)
 declare @cant_doc int
 declare @cant_verificados int 
 declare @porcentaje decimal(5,2)
 declare @puntaje_total decimal(5,2) = 0
 declare @puntaje_obtenido decimal(5,2) = 0

 -- Meses anteriores es hasta el mes anterior al PeriodoVencido, por eso le resto 1 mes
 /* 15/10/2021: le resto dos meses, porque toma en cumplimiento_ultimo_mes, el mes anterior al que se está analizando */
 set @periodo_hasta1 = convert(date, substring(convert(char,@periodo_hasta),1,4)+'-'+substring(convert(char,@periodo_hasta),5,2)+'-01')
 --set @periodo_hasta1 = dateadd(m,-1,@periodo_hasta1)
 set @periodo_hasta1 = dateadd(m,-2,@periodo_hasta1)
 set @periodo_hasta  = convert(int,convert(char(6),replace(@periodo_hasta1,'-',''))) 

 DECLARE C_cursor CURSOR FOR
  select tipo_doc, isnull(cant_meses,12)-1, isnull(peso,0)
    from LED_Cumplimiento_historico 
   where cliente = @p_cliente 
     
 OPEN C_cursor
 FETCH NEXT FROM C_cursor INTO @tipo_doc, @cant_meses, @peso 
 WHILE @@fetch_status = 0
 BEGIN 
  
  set @cant_meses = @cant_meses * (-1)
  set @periodo_hasta1 = convert(date, substring(convert(char,@periodo_hasta),1,4)+'-'+substring(convert(char,@periodo_hasta),5,2)+'-01')
  set @periodo_desde1 = dateadd(m,@cant_meses,@periodo_hasta1)
  set @periodo_desde  = convert(int,convert(char(6),replace(@periodo_desde1,'-',''))) 
  
  set @cant_doc = (select count(*) from led_docs where contratista = @p_contratista 
       and tipo_doc = @tipo_doc and estado_doc != 'X'  and periodo between @periodo_desde and @periodo_hasta)
  set @cant_verificados = (select count(*) from led_docs where contratista = @p_contratista 
       and tipo_doc = @tipo_doc and estado_doc = 'V'  and periodo between @periodo_desde and @periodo_hasta)
  set @porcentaje = null
  if (@cant_doc != 0)
  begin
   set @porcentaje = 100.00*@cant_verificados/@cant_doc
   set @porcentaje = @porcentaje/100.00 * @peso
   set @puntaje_total = @puntaje_total + @peso
   set @puntaje_obtenido = @puntaje_obtenido + @porcentaje
  end
  --select @tipo_doc as tipo_doc, @cant_meses meses, @peso peso,
  --@cant_doc cant_doc, @cant_verificados verificados,  @porcentaje puntaje, @periodo_desde desde, @periodo_hasta hasta
  FETCH NEXT FROM C_cursor INTO @tipo_doc, @cant_meses, @peso
 END 
 
 CLOSE C_cursor
 DEALLOCATE C_cursor 

 declare @indicador int = (select indicador from ln_indicadores where clave_indicador = 'CUMPLIMIENTO_MESES_ANTERIORES' and producto = 2066) 


 --select @puntaje_total total, @puntaje_obtenido obtenido 
 if (@puntaje_total = 0) 
 begin
  set @p_puntos = 0
  select @p_estado = texto, @p_estado_txt = texto_largo, @p_color = color_fondo
      from ln_cliente_nivel where indicador = @indicador and cliente = @p_cliente and desde <= @p_puntos and hasta > @p_puntos  
 end
 else
 begin
  if (@puntaje_total != 0) 
  begin
   set @p_puntos = (@puntaje_obtenido*100) / @puntaje_total
   select @p_estado = texto, @p_estado_txt = texto_largo, @p_color = color_fondo
       from ln_cliente_nivel where indicador = @indicador and cliente = @p_cliente and desde <= @p_puntos and hasta > @p_puntos  
  end 
  else 
  begin
   set @p_puntos = null 
   set @p_estado = null 
   set @p_estado_txt = null
   set @p_color = null
  end 
 end 


END

GO