Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
12| Name | Data Type | Length | Description |
|---|---|---|---|
| @p_contratista | int | 4 | |
| @cumplimiento | int | 4 | |
| @p_contratistas_subcontratistas | char | 1 | |
| @p_ultimo_mes_anteriores | char | 1 | |
| @p_cual_es_ultimo | int | 4 | |
| @p_cuantos_meses_tomar | int | 4 | |
| @periodo_txt | char | 50 | |
| @pendientes | float | 8 | |
| @ingresados | float | 8 | |
| @verificados | float | 8 | |
| @rechazados | float | 8 | |
| @totales | float | 8 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: Marita Soria
-- Create date: 28/06/2023
-- Description: Calcula Porcentaje de cumplimiento de Imperium:
-- - Se puede pedir de documentos propios del Contratista / de los Subcontratistas o Todo (Completo: contratista y subcontratistas)
-- (@p_contratistas_subcontratistas C o S o T)
-- - Del ultimo mes o de los meses anteriores a ese ultimo que quieren
-- (@p_ultimo_mes_anteriores U o A)
-- - que mes tomamos como ultimo?
-- (@p_cual_es_ultimo) -- 1 = PeriodoVencido
-- 2 = PeriodoMenosDos,
-- etc
-- - cantidad de meses a tomar cuando se pide Anteriores
-- (@p_cuantos_meses_tomar)
-- =============================================
/*
exec [Imperium_cumplimientos] 10072, @cumplimiento output, 'T','A',2,1
declare @hhh1 int,
@per varchar(50),
@pendientes FLOAT,
@ingresados FLOAT ,
@verificados FLOAT ,
@rechazados FLOAT ,
@totales FLOAT
exec [Imperium_cumplimientos_2024] 8920, @hhh1 output, 'T','A',2,1,
@per output,
@pendientes output,
@ingresados output ,
@verificados output ,
@rechazados output ,
@totales output
select @per as periodo,
@hhh1 as cumplimiento,
@pendientes as pendientes,
@ingresados as ingresados ,
@verificados as verificados ,
@rechazados as rechazados,
@totales as totales
declare @hhh1 int
exec [Imperium_cumplimientos] 8920, @hhh1 output, 'T','A',2,1
select @hhh1
select * from ln_contrapartes where contraparte = 191515
exec [Imperium_cumplimientos] 7900, @hhh1 output, 'S','U',1
exec [Imperium_cumplimientos] 7900, @hhh1 output, 'T','U',1
exec [Imperium_cumplimientos] 7900, @hhh1 output, 'C','A',1,12
exec [Imperium_cumplimientos] 7900, @hhh1 output, 'S','A',1,12
declare @hhh1 int
exec [Imperium_cumplimientos] 10072, @hhh1 output, 'T','A',2,1
--exec [Imperium_cumplimientos] 10072, @hhh1 output, 'T','A',1,12
select @hhh1
select id_imperium from ln_contrapartes where contraparte = 183617
select * from led_docs where contratista_1 = 7900 and led_docs.contratista != led_docs.contratista_1
*/
CREATE OR ALTER PROCEDURE dbo.Imperium_cumplimientos_2024
@p_contratista int,
@cumplimiento int output,
@p_contratistas_subcontratistas char(1) = 'C', -- C = contratista, S = Subcontratistas, T = Todo (Completo: contratista y subcontratistas)
@p_ultimo_mes_anteriores char(1) = 'U', -- U = ultimo mes (toma como mes lo indicado en: @p_cual_es_ultimo)
-- A = meses anteriores
@p_cual_es_ultimo int = 1, /* que mes tomamos como ultimo?
1 = PeriodoVencido
2 = PeriodoMenosDos,
etc
*/
@p_cuantos_meses_tomar int = 11, -- cantidad de meses a tomar cuando se pide Anteriores
@periodo_txt char(50) output, -- Muestra que periodo esta tomando
@pendientes FLOAT output,
@ingresados FLOAT output,
@verificados FLOAT output,
@rechazados FLOAT output,
@totales FLOAT output
AS
BEGIN
SET NOCOUNT ON;
DECLARE @rate FLOAT
if (@p_cual_es_ultimo is null or @p_cual_es_ultimo < 0) set @p_cual_es_ultimo = 1
if (@p_cuantos_meses_tomar is null or @p_cuantos_meses_tomar <= 0) set @p_cuantos_meses_tomar = 11
declare @periodo_desde1 date = null
declare @periodo_hasta1 date = null
declare @periodo_desde int
declare @periodo_hasta int = dbo.PeriodoAdelantado()
declare @meses int
set @meses = @p_cual_es_ultimo * (-1)
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,@meses,@periodo_hasta1)
if (@p_ultimo_mes_anteriores = 'U')
begin
set @periodo_hasta = convert(int,convert(char(6),replace(@periodo_hasta1,'-','')))
set @periodo_desde = @periodo_hasta -- solo ultimo
end
else
begin -- Meses anteriores
-- set @periodo_hasta1 = dateadd(m,-1,@periodo_hasta1) -- hasta: uno menos que el que consideramos ultimo
-- MAL PORQUE SE PARABA UN MES MENOS DEL QUE PEDIMOS
-- (servia cuando se pedian ultimos 12 meses, pero lo que hay que hacer es cuando se llama mandarle como parametro 2,12
-- desde: tantos meses para atras solicitados
set @meses = (@p_cuantos_meses_tomar-1) * (-1)
set @periodo_desde1 = dateadd(m,@meses,@periodo_hasta1)
set @periodo_hasta = convert(int,convert(char(6),replace(@periodo_hasta1,'-','')))
set @periodo_desde = convert(int,convert(char(6),replace(@periodo_desde1,'-','')))
end
if (@periodo_desde < dbo.PeriodoAnual()) set @periodo_desde = dbo.PeriodoAnual()
if (@periodo_hasta < dbo.PeriodoAnual()) set @periodo_hasta = dbo.PeriodoAnual()
select @periodo_desde desde, @periodo_hasta hasta, @meses as cuantos_meses
declare @periodo_txt1 varchar(50) = null
declare @periodo_txt2 varchar(50) = null
if (@periodo_desde = @periodo_hasta)
begin
set @periodo_txt = @periodo_desde
set @periodo_txt = SUBSTRING(@periodo_txt,5,2)+'/'+substring(@periodo_txt,1,4)
end
else
begin
set @periodo_txt1 = @periodo_desde
set @periodo_txt1 = SUBSTRING(@periodo_txt1,5,2)+'/'+substring(@periodo_txt1,1,4)
set @periodo_txt2 = @periodo_hasta
set @periodo_txt2 = SUBSTRING(@periodo_txt2,5,2)+'/'+substring(@periodo_txt2,1,4)
set @periodo_txt = @periodo_txt1 + ' - ' + @periodo_txt2
end
declare @estado char(1), @cantidad float
set @pendientes = 0
set @ingresados = 0
set @verificados = 0
set @rechazados = 0
set @totales = 0
if (@p_contratistas_subcontratistas = 'C')
begin
DECLARE C_cantidades CURSOR FOR
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_contratista_periodo
ON (led_docs.contratista = led_contratista_periodo.contratista
AND led_docs.periodo = led_contratista_periodo.periodo)
INNER JOIN led_contratistas ON led_docs.contratista = led_contratistas.contratista
INNER JOIN led_cliente_contratista ON
(led_docs.tipo_doc = led_cliente_contratista.tipo_doc
AND led_contratistas.tipo_contratista = led_cliente_contratista.tipo_contratista
AND led_contratistas.cliente = led_cliente_contratista.cliente
AND ISNULL(led_cliente_contratista.afecta_compliance, 0) > 0)
WHERE led_docs.contratista = @p_contratista and led_docs.contratista = led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_empleados_periodo
ON (led_docs.empleado = led_empleados_periodo.empleado
AND led_docs.periodo = led_empleados_periodo.periodo)
INNER JOIN led_empleados ON led_docs.empleado = led_empleados.empleado
INNER JOIN led_cliente_empleado ON
(led_docs.tipo_doc = led_cliente_empleado.tipo_doc
AND led_empleados.tipo_empleado = led_cliente_empleado.tipo_empleado
AND led_empleados.cliente = led_cliente_empleado.cliente
AND ISNULL(led_cliente_empleado.afecta_compliance, 0) > 0)
WHERE led_docs.contratista = @p_contratista and led_docs.contratista = led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_vehiculos_periodo
ON (led_docs.vehiculo = led_vehiculos_periodo.vehiculo
AND led_docs.periodo = led_vehiculos_periodo.periodo)
INNER JOIN led_vehiculos ON led_docs.vehiculo = led_vehiculos.vehiculo
INNER JOIN led_cliente_vehiculo ON
(led_docs.tipo_doc = led_cliente_vehiculo.tipo_doc
AND led_vehiculos.tipo_vehiculo = led_cliente_vehiculo.tipo_vehiculo
AND led_vehiculos.cliente = led_cliente_vehiculo.cliente
AND ISNULL(led_cliente_vehiculo.afecta_compliance, 0) > 0)
WHERE led_docs.contratista = @p_contratista and led_docs.contratista = led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
OPEN C_cantidades
FETCH NEXT FROM C_cantidades INTO @estado, @cantidad
WHILE @@fetch_status = 0
BEGIN
if @estado = 'V' set @verificados = @verificados + @cantidad
if @estado = 'N' set @pendientes = @pendientes + @cantidad
if @estado = 'I' set @ingresados = @ingresados + @cantidad
if @estado = 'R' set @rechazados = @rechazados + @cantidad
if @estado in ('V','N','I','R') set @totales = @totales + @cantidad
FETCH NEXT FROM C_cantidades INTO @estado, @cantidad
END
CLOSE C_cantidades
DEALLOCATE C_cantidades
end
if (@p_contratistas_subcontratistas = 'S')
begin
DECLARE C_cantidades_2 CURSOR FOR
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_empleados_periodo
ON (led_docs.empleado = led_empleados_periodo.empleado
AND led_docs.periodo = led_empleados_periodo.periodo)
INNER JOIN led_empleados ON led_docs.empleado = led_empleados.empleado
INNER JOIN led_cliente_empleado ON
(led_docs.tipo_doc = led_cliente_empleado.tipo_doc
AND led_empleados.tipo_empleado = led_cliente_empleado.tipo_empleado
AND led_empleados.cliente = led_cliente_empleado.cliente
AND ISNULL(led_cliente_empleado.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista and led_docs.contratista != led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_vehiculos_periodo
ON (led_docs.vehiculo = led_vehiculos_periodo.vehiculo
AND led_docs.periodo = led_vehiculos_periodo.periodo)
INNER JOIN led_vehiculos ON led_docs.vehiculo = led_vehiculos.vehiculo
INNER JOIN led_cliente_vehiculo ON
(led_docs.tipo_doc = led_cliente_vehiculo.tipo_doc
AND led_vehiculos.tipo_vehiculo = led_cliente_vehiculo.tipo_vehiculo
AND led_vehiculos.cliente = led_cliente_vehiculo.cliente
AND ISNULL(led_cliente_vehiculo.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista and led_docs.contratista != led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
UNION ALL
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_subcontratista_periodo
ON (led_docs.contratista = led_subcontratista_periodo.subcontratista
AND led_docs.periodo = led_subcontratista_periodo.periodo)
INNER JOIN led_contratistas ON led_docs.contratista = led_contratistas.contratista
INNER JOIN led_cliente_contratista ON
(led_docs.tipo_doc = led_cliente_contratista.tipo_doc
AND led_contratistas.tipo_contratista = led_cliente_contratista.tipo_contratista
AND led_contratistas.cliente = led_cliente_contratista.cliente
AND ISNULL(led_cliente_contratista.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista and led_docs.contratista != led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.estado_doc = 'V'
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
OPEN C_cantidades_2
FETCH NEXT FROM C_cantidades_2 INTO @estado, @cantidad
WHILE @@fetch_status = 0
BEGIN
if @estado = 'V' set @verificados = @verificados + @cantidad
if @estado = 'N' set @pendientes = @pendientes + @cantidad
if @estado = 'I' set @ingresados = @ingresados + @cantidad
if @estado = 'R' set @rechazados = @rechazados + @cantidad
if @estado in ('V','N','I','R') set @totales = @totales + @cantidad
FETCH NEXT FROM C_cantidades_2 INTO @estado, @cantidad
END
CLOSE C_cantidades_2
DEALLOCATE C_cantidades_2
end
if (@p_contratistas_subcontratistas = 'T') -- Todo
begin
DECLARE C_cantidades_3 CURSOR FOR
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_contratista_periodo
ON (led_docs.contratista = led_contratista_periodo.contratista
AND led_docs.periodo = led_contratista_periodo.periodo)
INNER JOIN led_contratistas ON led_docs.contratista = led_contratistas.contratista
INNER JOIN led_cliente_contratista ON
(led_docs.tipo_doc = led_cliente_contratista.tipo_doc
AND led_contratistas.tipo_contratista = led_cliente_contratista.tipo_contratista
AND led_contratistas.cliente = led_cliente_contratista.cliente
AND ISNULL(led_cliente_contratista.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
GROUP BY led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_empleados_periodo
ON (led_docs.empleado = led_empleados_periodo.empleado
AND led_docs.periodo = led_empleados_periodo.periodo)
INNER JOIN led_empleados ON led_docs.empleado = led_empleados.empleado
INNER JOIN led_cliente_empleado ON
(led_docs.tipo_doc = led_cliente_empleado.tipo_doc
AND led_empleados.tipo_empleado = led_cliente_empleado.tipo_empleado
AND led_empleados.cliente = led_cliente_empleado.cliente
AND ISNULL(led_cliente_empleado.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
GROUP BY led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_vehiculos_periodo
ON (led_docs.vehiculo = led_vehiculos_periodo.vehiculo
AND led_docs.periodo = led_vehiculos_periodo.periodo)
INNER JOIN led_vehiculos ON led_docs.vehiculo = led_vehiculos.vehiculo
INNER JOIN led_cliente_vehiculo ON
(led_docs.tipo_doc = led_cliente_vehiculo.tipo_doc
AND led_vehiculos.tipo_vehiculo = led_cliente_vehiculo.tipo_vehiculo
AND led_vehiculos.cliente = led_cliente_vehiculo.cliente
AND ISNULL(led_cliente_vehiculo.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
GROUP BY led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_subcontratista_periodo
ON (led_docs.contratista = led_subcontratista_periodo.subcontratista
AND led_docs.periodo = led_subcontratista_periodo.periodo)
INNER JOIN led_contratistas ON led_docs.contratista = led_contratistas.contratista
INNER JOIN led_cliente_contratista ON
(led_docs.tipo_doc = led_cliente_contratista.tipo_doc
AND led_contratistas.tipo_contratista = led_cliente_contratista.tipo_contratista
AND led_contratistas.cliente = led_cliente_contratista.cliente
AND ISNULL(led_cliente_contratista.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
GROUP BY led_docs.estado_doc
OPEN C_cantidades_3
FETCH NEXT FROM C_cantidades_3 INTO @estado, @cantidad
WHILE @@fetch_status = 0
BEGIN
if @estado = 'V' set @verificados = @verificados + @cantidad
if @estado = 'N' set @pendientes = @pendientes + @cantidad
if @estado = 'I' set @ingresados = @ingresados + @cantidad
if @estado = 'R' set @rechazados = @rechazados + @cantidad
if @estado in ('V','N','I','R') set @totales = @totales + @cantidad
FETCH NEXT FROM C_cantidades_3 INTO @estado, @cantidad
END
CLOSE C_cantidades_3
DEALLOCATE C_cantidades_3
end
IF (@totales > 0) BEGIN
--SET @rate = ROUND(@verificados / @totales * 100, 0)
SET @rate = floor(@verificados / @totales * 100) --> redondea para abajo 99.99 = 99
SET @cumplimiento = CAST(@rate AS int)
END ELSE
SET @cumplimiento = null
select @p_contratistas_subcontratistas as 'Cont./Subcont./Todos', @p_ultimo_mes_anteriores as 'Ultimo/Anteriores', @periodo_hasta as hasta,
@verificados as verificados, @totales as totales, @cumplimiento as cumplimiento
END
GO
GO
-- =============================================
-- Author: Marita Soria
-- Create date: 28/06/2023
-- Description: Calcula Porcentaje de cumplimiento de Imperium:
-- - Se puede pedir de documentos propios del Contratista / de los Subcontratistas o Todo (Completo: contratista y subcontratistas)
-- (@p_contratistas_subcontratistas C o S o T)
-- - Del ultimo mes o de los meses anteriores a ese ultimo que quieren
-- (@p_ultimo_mes_anteriores U o A)
-- - que mes tomamos como ultimo?
-- (@p_cual_es_ultimo) -- 1 = PeriodoVencido
-- 2 = PeriodoMenosDos,
-- etc
-- - cantidad de meses a tomar cuando se pide Anteriores
-- (@p_cuantos_meses_tomar)
-- =============================================
/*
exec [Imperium_cumplimientos] 10072, @cumplimiento output, 'T','A',2,1
declare @hhh1 int,
@per varchar(50),
@pendientes FLOAT,
@ingresados FLOAT ,
@verificados FLOAT ,
@rechazados FLOAT ,
@totales FLOAT
exec [Imperium_cumplimientos_2024] 8920, @hhh1 output, 'T','A',2,1,
@per output,
@pendientes output,
@ingresados output ,
@verificados output ,
@rechazados output ,
@totales output
select @per as periodo,
@hhh1 as cumplimiento,
@pendientes as pendientes,
@ingresados as ingresados ,
@verificados as verificados ,
@rechazados as rechazados,
@totales as totales
declare @hhh1 int
exec [Imperium_cumplimientos] 8920, @hhh1 output, 'T','A',2,1
select @hhh1
select * from ln_contrapartes where contraparte = 191515
exec [Imperium_cumplimientos] 7900, @hhh1 output, 'S','U',1
exec [Imperium_cumplimientos] 7900, @hhh1 output, 'T','U',1
exec [Imperium_cumplimientos] 7900, @hhh1 output, 'C','A',1,12
exec [Imperium_cumplimientos] 7900, @hhh1 output, 'S','A',1,12
declare @hhh1 int
exec [Imperium_cumplimientos] 10072, @hhh1 output, 'T','A',2,1
--exec [Imperium_cumplimientos] 10072, @hhh1 output, 'T','A',1,12
select @hhh1
select id_imperium from ln_contrapartes where contraparte = 183617
select * from led_docs where contratista_1 = 7900 and led_docs.contratista != led_docs.contratista_1
*/
CREATE OR ALTER PROCEDURE dbo.Imperium_cumplimientos_2024
@p_contratista int,
@cumplimiento int output,
@p_contratistas_subcontratistas char(1) = 'C', -- C = contratista, S = Subcontratistas, T = Todo (Completo: contratista y subcontratistas)
@p_ultimo_mes_anteriores char(1) = 'U', -- U = ultimo mes (toma como mes lo indicado en: @p_cual_es_ultimo)
-- A = meses anteriores
@p_cual_es_ultimo int = 1, /* que mes tomamos como ultimo?
1 = PeriodoVencido
2 = PeriodoMenosDos,
etc
*/
@p_cuantos_meses_tomar int = 11, -- cantidad de meses a tomar cuando se pide Anteriores
@periodo_txt char(50) output, -- Muestra que periodo esta tomando
@pendientes FLOAT output,
@ingresados FLOAT output,
@verificados FLOAT output,
@rechazados FLOAT output,
@totales FLOAT output
AS
BEGIN
SET NOCOUNT ON;
DECLARE @rate FLOAT
if (@p_cual_es_ultimo is null or @p_cual_es_ultimo < 0) set @p_cual_es_ultimo = 1
if (@p_cuantos_meses_tomar is null or @p_cuantos_meses_tomar <= 0) set @p_cuantos_meses_tomar = 11
declare @periodo_desde1 date = null
declare @periodo_hasta1 date = null
declare @periodo_desde int
declare @periodo_hasta int = dbo.PeriodoAdelantado()
declare @meses int
set @meses = @p_cual_es_ultimo * (-1)
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,@meses,@periodo_hasta1)
if (@p_ultimo_mes_anteriores = 'U')
begin
set @periodo_hasta = convert(int,convert(char(6),replace(@periodo_hasta1,'-','')))
set @periodo_desde = @periodo_hasta -- solo ultimo
end
else
begin -- Meses anteriores
-- set @periodo_hasta1 = dateadd(m,-1,@periodo_hasta1) -- hasta: uno menos que el que consideramos ultimo
-- MAL PORQUE SE PARABA UN MES MENOS DEL QUE PEDIMOS
-- (servia cuando se pedian ultimos 12 meses, pero lo que hay que hacer es cuando se llama mandarle como parametro 2,12
-- desde: tantos meses para atras solicitados
set @meses = (@p_cuantos_meses_tomar-1) * (-1)
set @periodo_desde1 = dateadd(m,@meses,@periodo_hasta1)
set @periodo_hasta = convert(int,convert(char(6),replace(@periodo_hasta1,'-','')))
set @periodo_desde = convert(int,convert(char(6),replace(@periodo_desde1,'-','')))
end
if (@periodo_desde < dbo.PeriodoAnual()) set @periodo_desde = dbo.PeriodoAnual()
if (@periodo_hasta < dbo.PeriodoAnual()) set @periodo_hasta = dbo.PeriodoAnual()
select @periodo_desde desde, @periodo_hasta hasta, @meses as cuantos_meses
declare @periodo_txt1 varchar(50) = null
declare @periodo_txt2 varchar(50) = null
if (@periodo_desde = @periodo_hasta)
begin
set @periodo_txt = @periodo_desde
set @periodo_txt = SUBSTRING(@periodo_txt,5,2)+'/'+substring(@periodo_txt,1,4)
end
else
begin
set @periodo_txt1 = @periodo_desde
set @periodo_txt1 = SUBSTRING(@periodo_txt1,5,2)+'/'+substring(@periodo_txt1,1,4)
set @periodo_txt2 = @periodo_hasta
set @periodo_txt2 = SUBSTRING(@periodo_txt2,5,2)+'/'+substring(@periodo_txt2,1,4)
set @periodo_txt = @periodo_txt1 + ' - ' + @periodo_txt2
end
declare @estado char(1), @cantidad float
set @pendientes = 0
set @ingresados = 0
set @verificados = 0
set @rechazados = 0
set @totales = 0
if (@p_contratistas_subcontratistas = 'C')
begin
DECLARE C_cantidades CURSOR FOR
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_contratista_periodo
ON (led_docs.contratista = led_contratista_periodo.contratista
AND led_docs.periodo = led_contratista_periodo.periodo)
INNER JOIN led_contratistas ON led_docs.contratista = led_contratistas.contratista
INNER JOIN led_cliente_contratista ON
(led_docs.tipo_doc = led_cliente_contratista.tipo_doc
AND led_contratistas.tipo_contratista = led_cliente_contratista.tipo_contratista
AND led_contratistas.cliente = led_cliente_contratista.cliente
AND ISNULL(led_cliente_contratista.afecta_compliance, 0) > 0)
WHERE led_docs.contratista = @p_contratista and led_docs.contratista = led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_empleados_periodo
ON (led_docs.empleado = led_empleados_periodo.empleado
AND led_docs.periodo = led_empleados_periodo.periodo)
INNER JOIN led_empleados ON led_docs.empleado = led_empleados.empleado
INNER JOIN led_cliente_empleado ON
(led_docs.tipo_doc = led_cliente_empleado.tipo_doc
AND led_empleados.tipo_empleado = led_cliente_empleado.tipo_empleado
AND led_empleados.cliente = led_cliente_empleado.cliente
AND ISNULL(led_cliente_empleado.afecta_compliance, 0) > 0)
WHERE led_docs.contratista = @p_contratista and led_docs.contratista = led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_vehiculos_periodo
ON (led_docs.vehiculo = led_vehiculos_periodo.vehiculo
AND led_docs.periodo = led_vehiculos_periodo.periodo)
INNER JOIN led_vehiculos ON led_docs.vehiculo = led_vehiculos.vehiculo
INNER JOIN led_cliente_vehiculo ON
(led_docs.tipo_doc = led_cliente_vehiculo.tipo_doc
AND led_vehiculos.tipo_vehiculo = led_cliente_vehiculo.tipo_vehiculo
AND led_vehiculos.cliente = led_cliente_vehiculo.cliente
AND ISNULL(led_cliente_vehiculo.afecta_compliance, 0) > 0)
WHERE led_docs.contratista = @p_contratista and led_docs.contratista = led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
OPEN C_cantidades
FETCH NEXT FROM C_cantidades INTO @estado, @cantidad
WHILE @@fetch_status = 0
BEGIN
if @estado = 'V' set @verificados = @verificados + @cantidad
if @estado = 'N' set @pendientes = @pendientes + @cantidad
if @estado = 'I' set @ingresados = @ingresados + @cantidad
if @estado = 'R' set @rechazados = @rechazados + @cantidad
if @estado in ('V','N','I','R') set @totales = @totales + @cantidad
FETCH NEXT FROM C_cantidades INTO @estado, @cantidad
END
CLOSE C_cantidades
DEALLOCATE C_cantidades
end
if (@p_contratistas_subcontratistas = 'S')
begin
DECLARE C_cantidades_2 CURSOR FOR
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_empleados_periodo
ON (led_docs.empleado = led_empleados_periodo.empleado
AND led_docs.periodo = led_empleados_periodo.periodo)
INNER JOIN led_empleados ON led_docs.empleado = led_empleados.empleado
INNER JOIN led_cliente_empleado ON
(led_docs.tipo_doc = led_cliente_empleado.tipo_doc
AND led_empleados.tipo_empleado = led_cliente_empleado.tipo_empleado
AND led_empleados.cliente = led_cliente_empleado.cliente
AND ISNULL(led_cliente_empleado.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista and led_docs.contratista != led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_vehiculos_periodo
ON (led_docs.vehiculo = led_vehiculos_periodo.vehiculo
AND led_docs.periodo = led_vehiculos_periodo.periodo)
INNER JOIN led_vehiculos ON led_docs.vehiculo = led_vehiculos.vehiculo
INNER JOIN led_cliente_vehiculo ON
(led_docs.tipo_doc = led_cliente_vehiculo.tipo_doc
AND led_vehiculos.tipo_vehiculo = led_cliente_vehiculo.tipo_vehiculo
AND led_vehiculos.cliente = led_cliente_vehiculo.cliente
AND ISNULL(led_cliente_vehiculo.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista and led_docs.contratista != led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
UNION ALL
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_subcontratista_periodo
ON (led_docs.contratista = led_subcontratista_periodo.subcontratista
AND led_docs.periodo = led_subcontratista_periodo.periodo)
INNER JOIN led_contratistas ON led_docs.contratista = led_contratistas.contratista
INNER JOIN led_cliente_contratista ON
(led_docs.tipo_doc = led_cliente_contratista.tipo_doc
AND led_contratistas.tipo_contratista = led_cliente_contratista.tipo_contratista
AND led_contratistas.cliente = led_cliente_contratista.cliente
AND ISNULL(led_cliente_contratista.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista and led_docs.contratista != led_docs.contratista_1
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.estado_doc = 'V'
AND led_docs.doc_id_lista IS NULL
group by led_docs.estado_doc
OPEN C_cantidades_2
FETCH NEXT FROM C_cantidades_2 INTO @estado, @cantidad
WHILE @@fetch_status = 0
BEGIN
if @estado = 'V' set @verificados = @verificados + @cantidad
if @estado = 'N' set @pendientes = @pendientes + @cantidad
if @estado = 'I' set @ingresados = @ingresados + @cantidad
if @estado = 'R' set @rechazados = @rechazados + @cantidad
if @estado in ('V','N','I','R') set @totales = @totales + @cantidad
FETCH NEXT FROM C_cantidades_2 INTO @estado, @cantidad
END
CLOSE C_cantidades_2
DEALLOCATE C_cantidades_2
end
if (@p_contratistas_subcontratistas = 'T') -- Todo
begin
DECLARE C_cantidades_3 CURSOR FOR
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_contratista_periodo
ON (led_docs.contratista = led_contratista_periodo.contratista
AND led_docs.periodo = led_contratista_periodo.periodo)
INNER JOIN led_contratistas ON led_docs.contratista = led_contratistas.contratista
INNER JOIN led_cliente_contratista ON
(led_docs.tipo_doc = led_cliente_contratista.tipo_doc
AND led_contratistas.tipo_contratista = led_cliente_contratista.tipo_contratista
AND led_contratistas.cliente = led_cliente_contratista.cliente
AND ISNULL(led_cliente_contratista.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
GROUP BY led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_empleados_periodo
ON (led_docs.empleado = led_empleados_periodo.empleado
AND led_docs.periodo = led_empleados_periodo.periodo)
INNER JOIN led_empleados ON led_docs.empleado = led_empleados.empleado
INNER JOIN led_cliente_empleado ON
(led_docs.tipo_doc = led_cliente_empleado.tipo_doc
AND led_empleados.tipo_empleado = led_cliente_empleado.tipo_empleado
AND led_empleados.cliente = led_cliente_empleado.cliente
AND ISNULL(led_cliente_empleado.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
GROUP BY led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_vehiculos_periodo
ON (led_docs.vehiculo = led_vehiculos_periodo.vehiculo
AND led_docs.periodo = led_vehiculos_periodo.periodo)
INNER JOIN led_vehiculos ON led_docs.vehiculo = led_vehiculos.vehiculo
INNER JOIN led_cliente_vehiculo ON
(led_docs.tipo_doc = led_cliente_vehiculo.tipo_doc
AND led_vehiculos.tipo_vehiculo = led_cliente_vehiculo.tipo_vehiculo
AND led_vehiculos.cliente = led_cliente_vehiculo.cliente
AND ISNULL(led_cliente_vehiculo.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
GROUP BY led_docs.estado_doc
union all
SELECT led_docs.estado_doc, COUNT(*) as cantidad
FROM led_docs INNER JOIN led_subcontratista_periodo
ON (led_docs.contratista = led_subcontratista_periodo.subcontratista
AND led_docs.periodo = led_subcontratista_periodo.periodo)
INNER JOIN led_contratistas ON led_docs.contratista = led_contratistas.contratista
INNER JOIN led_cliente_contratista ON
(led_docs.tipo_doc = led_cliente_contratista.tipo_doc
AND led_contratistas.tipo_contratista = led_cliente_contratista.tipo_contratista
AND led_contratistas.cliente = led_cliente_contratista.cliente
AND ISNULL(led_cliente_contratista.afecta_compliance, 0) > 0)
WHERE led_docs.contratista_1 = @p_contratista
AND led_docs.periodo BETWEEN @periodo_desde AND @periodo_hasta
AND led_docs.doc_id_lista IS NULL
GROUP BY led_docs.estado_doc
OPEN C_cantidades_3
FETCH NEXT FROM C_cantidades_3 INTO @estado, @cantidad
WHILE @@fetch_status = 0
BEGIN
if @estado = 'V' set @verificados = @verificados + @cantidad
if @estado = 'N' set @pendientes = @pendientes + @cantidad
if @estado = 'I' set @ingresados = @ingresados + @cantidad
if @estado = 'R' set @rechazados = @rechazados + @cantidad
if @estado in ('V','N','I','R') set @totales = @totales + @cantidad
FETCH NEXT FROM C_cantidades_3 INTO @estado, @cantidad
END
CLOSE C_cantidades_3
DEALLOCATE C_cantidades_3
end
IF (@totales > 0) BEGIN
--SET @rate = ROUND(@verificados / @totales * 100, 0)
SET @rate = floor(@verificados / @totales * 100) --> redondea para abajo 99.99 = 99
SET @cumplimiento = CAST(@rate AS int)
END ELSE
SET @cumplimiento = null
select @p_contratistas_subcontratistas as 'Cont./Subcont./Todos', @p_ultimo_mes_anteriores as 'Ultimo/Anteriores', @periodo_hasta as hasta,
@verificados as verificados, @totales as totales, @cumplimiento as cumplimiento
END
GO