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
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