Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
4| Name | Data Type | Length | Description |
|---|---|---|---|
| @p_client_id | int | 4 | |
| @p_activo | bit | 1 | |
| @p_parte | int | 4 | |
| @p_cuit | varchar | 20 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
exec [monitoreo_lista] 806892136,1
exec [monitoreo_lista] 806892136,0
exec monitoreo_lista '2254875',1,1,'20336165009'
select * from clientes where cliente = 110864291
SELECT fecha, tabla, id_tabla, id_monitoreo
FROM monitoreos_resultados
WHERE Cuit = '30710074611'
and Fecha > getdate() - 365
and Fecha > '2022-02-23'
and seccion_mantenimiento in (select item from dbo.DelimitedSplit8K( '10,11,18,2,6,8,9',','))
order by fecha desc, id_monitoreo desc
*/
/*
Se pasa como parámetro el código de cliente,
devuelve la lista de todos los CUITs en monitoreo aún vigente,
y la fecha de última novedad encontrada (si es del último año)
va devolviendo de a 1000 cuits, porque cuando son muchos, tarda demasiado y el php muere por timeout
mandar como tercer paramentro: parte 1, despues 2, despues 3.... hasta que en el campo mas_datos devuelva
06/02/2025: No se devuelve mas de a grupos. Pero se devuelven solo 5000 registros, porque la Datatable se marea con mas de 5000
*/
CREATE OR ALTER PROCEDURE dbo.monitoreo_lista
@p_client_id int,
@p_activo bit = 1,
@p_parte int = 1,
@p_cuit varchar(20) = null
AS
BEGIN
SET NOCOUNT ON;
declare @mas_datos int = 0
/* 06/02/2025: No se hacen más los grupos de a 1000, se dicidió que solo tome 5000 reg
declare @cuits table (id int identity, cuit varchar(50))
if @p_activo = 1
begin
insert into @cuits (cuit)
select distinct cuit from monitoreos where cliente = @p_client_id
and monitoreos.visible = 1
and monitoreos.fecha_desde <= getdate() and monitoreos.fecha_vigencia_mantenimiento >= getdate()
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
order by cuit
end
else
begin
insert into @cuits (cuit)
select distinct cuit from monitoreos where cliente = @p_client_id
and (monitoreos.visible = 0 or monitoreos.fecha_vigencia_mantenimiento < getdate())
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
and not exists (select *
from monitoreos mb
where mb.cliente = monitoreos.cliente and mb.cuit = monitoreos.cuit
and mb.seccion_mantenimiento = monitoreos.seccion_mantenimiento
and mb.visible = 1 and mb.fecha_vigencia_mantenimiento >= getdate())
order by cuit
end
declare @mas_datos int = 0
if (select COUNT(*) from @cuits
where id between (@p_parte * 1000) - 999 and (@p_parte * 1000)) = 0
begin
select @mas_datos as mas_datos, 'sin datos' as error
return
end
if (select COUNT(*) from @cuits
where id > (@p_parte * 1000)) > 0
begin
set @mas_datos = 1
end
*/
/*
select
nombre_persona,
cuit,
convert(date,iif(max(monitoreos.fecha_ultimo_procesamiento) < getdate()-365,null, max(monitoreos.fecha_ultimo_procesamiento))) as ultima_novedad,
convert(date,max(monitoreos.fecha_vigencia_mantenimiento)) as fin_monitoreo
from monitoreos
left join padrones on (padrones.identificacion = cuit and
padrones.habilitado = 1 and
padrones.identificador in (select identificador from identificadores where country_code = 'AR'))
where monitoreos.cliente = @p_client_id
and monitoreos.visible = 1
and monitoreos.fecha_desde <= getdate() and monitoreos.fecha_vigencia_mantenimiento >= getdate()
--and (monitoreos.fecha_ultimo_procesamiento is null or monitoreos.fecha_ultimo_procesamiento between monitoreos.fecha_desde and monitoreos.fecha_vigencia_mantenimiento)
group by cuit, nombre_persona
order by ultima_novedad desc, nombre_persona asc
*/
declare @resultado table (nombre_persona varchar(500), cuit varchar(22), identificador varchar(20), id_padron int,
ultima_novedad date, fin_monitoreo date, inicio_monitoreo date,
lista varchar(512),comentarios varchar(max),trazabilidad varchar(max))
declare @nombre varchar(500),
@cuit varchar(22),
@ultima_novedad date,
@fin_monitoreo date,
@inicio_monitoreo date,
@seccion int,
@lista varchar(512),
@comentarios varchar(max),
@trazabilidad varchar(max)
declare @fecha datetime, @tabla varchar(100), @id_tabla int, @id_monitoreo int
if @p_activo = 1
begin
declare @fecha_modificacion date
declare C_Cursor CURSOR FOR
select
nombre_persona,
cuit, identificadores.abreviatura, padrones.id_padron,
dd.lista_secciones as lista,
dd2.comentarios, dd3.trazabilidad,
MAX(convert(date,fecha_desde)) as fecha_desde,
MAX(convert(date,fecha_vigencia_mantenimiento)) as fin_monitoreo,
MAX(convert(date,fecha_modificacion)) as fecha_modificacion
from monitoreos
left join padrones on (padrones.identificacion = cuit and
padrones.habilitado = 1 and
padrones.identificador in (select identificador from identificadores where country_code = 'AR'))
left join identificadores on (identificadores.identificador = padrones.identificador)
left join (select cliente as cli_sec, cuit as cuit_sec, fecha_vigencia_mantenimiento as fin, lista_secciones=STUFF(
(SELECT distinct ','+seccion_mantenimiento AS [text()]
FROM monitoreos XT
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente and XT.visible = 1
order by [text()]
FOR XML PATH('')), 1,1, '')
FROM monitoreos T where T.visible = 1
GROUP BY cliente, cuit, visible, fecha_vigencia_mantenimiento) dd
on (dd.cuit_sec = monitoreos.cuit
and dd.cli_sec = monitoreos.cliente
and dd.fin >= getdate())
left join (select cliente as cli_sec, cuit as cuit_sec, fecha_vigencia_mantenimiento as fin, comentarios=STUFF(
(SELECT distinct '|'+observaciones_cliente AS [text()]
FROM monitoreos XT
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente and XT.visible = 1
order by [text()]
FOR XML PATH('')), 1,1, '')
FROM monitoreos T where T.visible = 1
GROUP BY cliente, cuit, fecha_vigencia_mantenimiento) dd2
on (dd2.cuit_sec = monitoreos.cuit
and dd2.cli_sec = monitoreos.cliente
and dd2.fin >= getdate())
left join (select cliente as cli_sec, cuit as cuit_sec, trazabilidad=STUFF(
(SELECT '|'+ convert(varchar,created,103) + ' ' + iif(last_name is null and first_name is null, username,
isnull(last_name,'') + ' ' + isnull(first_name,'')) + ': ' +
detalle AS [text()]
FROM trazabilidad_monitoreos XT
left join users on users.user_id = XT.user_id
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente
order by created desc
FOR XML PATH('')), 1,1, '')
FROM trazabilidad_monitoreos T
GROUP BY cliente, cuit
) dd3
on (dd3.cuit_sec = monitoreos.cuit
and dd3.cli_sec = monitoreos.cliente
)
where monitoreos.cliente = @p_client_id
and monitoreos.visible = 1
and monitoreos.fecha_desde <= getdate() and monitoreos.fecha_vigencia_mantenimiento >= getdate()
and nombre_persona is not null -- para saber que existe en padron
--and cuit in (select cuit from @cuits where id between (@p_parte * 1000) - 999 and (@p_parte * 1000))
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
--order by nombre_persona
--order by cuit
group by
nombre_persona,
cuit, identificadores.abreviatura, padrones.id_padron,
dd.lista_secciones,
dd2.comentarios,
dd3.trazabilidad
order by fecha_modificacion desc
end
else
begin
declare C_Cursor CURSOR FOR
select
nombre_persona,
cuit, identificadores.abreviatura, padrones.id_padron,
dd.lista_secciones as lista,
dd2.comentarios,
dd3.trazabilidad,
MAX(convert(date,fecha_desde)) as fecha_desde,
MAX(convert(date,fecha_vigencia_mantenimiento)) as fin_monitoreo,
MAX(convert(date,fecha_modificacion)) as fecha_modificacion
from monitoreos
left join padrones on (padrones.identificacion = cuit and
padrones.habilitado = 1 and
padrones.identificador in (select identificador from identificadores where country_code = 'AR'))
left join identificadores on (identificadores.identificador = padrones.identificador)
left join (select cliente as cli_sec, cuit as cuit_sec, fecha_vigencia_mantenimiento as fin, lista_secciones=STUFF(
(SELECT distinct ','+seccion_mantenimiento AS [text()]
FROM monitoreos XT
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente and XT.visible = 0
and not exists (select * from monitoreos mb where mb.cliente = XT.cliente and mb.cuit = XT.cuit and mb.seccion_mantenimiento = XT.seccion_mantenimiento and mb.visible = 1 and mb.fecha_vigencia_mantenimiento >= getdate())
order by [text()]
FOR XML PATH('')), 1,1, '')
FROM monitoreos T where T.visible = 0
GROUP BY cliente, cuit, visible, fecha_vigencia_mantenimiento) dd
on (dd.cuit_sec = monitoreos.cuit
and dd.cli_sec = monitoreos.cliente
and dd.fin >= getdate())
left join (select cliente as cli_sec, cuit as cuit_sec, fecha_vigencia_mantenimiento as fin, comentarios=STUFF(
(SELECT distinct '|'+observaciones_cliente AS [text()]
FROM monitoreos XT
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente and XT.visible = 0
and not exists (select * from monitoreos mb where mb.cliente = XT.cliente and mb.cuit = XT.cuit and mb.seccion_mantenimiento = XT.seccion_mantenimiento and mb.visible = 1 and mb.fecha_vigencia_mantenimiento >= getdate())
order by [text()]
FOR XML PATH('')), 1,1, '')
FROM monitoreos T where T.visible = 0
GROUP BY cliente, cuit, visible, fecha_vigencia_mantenimiento) dd2
on (dd2.cuit_sec = monitoreos.cuit
and dd2.cli_sec = monitoreos.cliente
and dd2.fin >= getdate())
left join (select cliente as cli_sec, cuit as cuit_sec, trazabilidad=STUFF(
(SELECT '|'+ convert(varchar,created,103) + ' ' + iif(last_name is null and first_name is null, username,
isnull(last_name,'') + ' ' + isnull(first_name,'')) + ': ' +
detalle AS [text()]
FROM trazabilidad_monitoreos XT
left join users on users.user_id = XT.user_id
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente
order by created desc
FOR XML PATH('')), 1,1, '')
FROM trazabilidad_monitoreos T
GROUP BY cliente, cuit
) dd3
on (dd3.cuit_sec = monitoreos.cuit
and dd3.cli_sec = monitoreos.cliente
)
where monitoreos.cliente = @p_client_id
and nombre_persona is not null -- para saber que existe en padron
and (monitoreos.visible = 0 or monitoreos.fecha_vigencia_mantenimiento < getdate())
-- Si vencieron hace mas de 1 año, chau, no los mostramos...
and monitoreos.fecha_vigencia_mantenimiento >= getdate() - 365
--
and not exists (select * from monitoreos mb where mb.cliente = monitoreos.cliente and mb.cuit = monitoreos.cuit and mb.seccion_mantenimiento = monitoreos.seccion_mantenimiento and mb.visible = 1 and mb.fecha_vigencia_mantenimiento >= getdate())
--and cuit in (select cuit from @cuits where id between (@p_parte * 1000) - 999 and (@p_parte * 1000))
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
--order by nombre_persona
--order by cuit
group by
nombre_persona,
cuit, identificadores.abreviatura, padrones.id_padron,
dd.lista_secciones,
dd2.comentarios,
dd3.trazabilidad
order by fecha_modificacion desc
end
declare @identificador varchar(20), @id_padron int
OPEN C_Cursor
FETCH NEXT FROM C_Cursor INTO @nombre, @cuit, @identificador, @id_padron, @lista, @comentarios, @trazabilidad, @inicio_monitoreo, @fin_monitoreo, @fecha_modificacion
WHILE @@fetch_status = 0
BEGIN
insert into @resultado(nombre_persona, cuit, identificador, id_padron,
ultima_novedad, fin_monitoreo, inicio_monitoreo,
lista,comentarios,trazabilidad)
values (@nombre, @cuit,@identificador,@id_padron, null, @fin_monitoreo, @inicio_monitoreo, @lista, @comentarios,@trazabilidad)
if @p_activo = 1 or @p_activo = 0 -- 07/02/2025: solo se hacia para activos, pero ahora se hace para inactivos también
begin
--> Busco fecha de ultima novedad
-- las fechas de novedad las corroboramos con las novedades registradas en monitoreos_resultados,
-- porque por ejemplo de cendeu tenemos que filtrar que haya cambiado la situacion
-- y además solo tenemos que mostrar novedades informadas en el último año (y que sean posteriores al inicio del monitoreo de ese cuit)
declare C_Resultados CURSOR FOR
SELECT fecha, tabla, id_tabla, id_monitoreo
FROM monitoreos_resultados
WHERE Cuit = @cuit
and Fecha > getdate() - 365
and Fecha > @inicio_monitoreo
and seccion_mantenimiento in (select convert(varchar,item) from dbo.DelimitedSplit8K( @lista,','))
order by fecha desc, id_monitoreo desc
OPEN C_Resultados
FETCH NEXT FROM C_Resultados INTO @fecha, @tabla, @id_tabla, @id_monitoreo
WHILE @@fetch_status = 0
BEGIN
if (@tabla like 'cendeu%') -- veo si cambio la situacion con respecto al mes anterior
begin
if not exists (select * from cendeu a
left join cendeu b on (b.iden = a.iden and convert(int,a.codigo_ent) = convert(int,b.codigo_ent) and b.vigente = 1
and b.fec_inf = (select max(fec_inf)
from cendeu c
where c.iden = a.iden and convert(int,a.codigo_ent) = convert(int,c.codigo_ent)
and c.fec_inf < a.fec_inf))
where a.id_cendeu = @id_tabla and a.vigente = 1
and (b.iden is null or convert(int,b.situacion) != convert(int,a.situacion)))
begin
-- si no hay cambio de situacion o deuda nueva sigo buscando
FETCH NEXT FROM C_Resultados INTO @fecha, @tabla, @id_tabla, @id_monitoreo
continue
end
end
UPDATE @resultado set ultima_novedad = @fecha where cuit = @cuit
break
END
CLOSE C_Resultados
DEALLOCATE C_Resultados
end
FETCH NEXT FROM C_Cursor INTO @nombre, @cuit, @identificador, @id_padron, @lista, @comentarios, @trazabilidad, @inicio_monitoreo, @fin_monitoreo, @fecha_modificacion
END
CLOSE C_Cursor
DEALLOCATE C_Cursor
declare @total_registros int = 0
/*
if @p_activo = 1
select @total_registros =
COUNT(distinct cuit) from monitoreos
left join padrones on (padrones.identificacion = cuit and
padrones.habilitado = 1 and
padrones.identificador in (select identificador from identificadores where country_code = 'AR'))
where monitoreos.cliente = @p_client_id
and monitoreos.visible = 1
and monitoreos.fecha_desde <= getdate() and monitoreos.fecha_vigencia_mantenimiento >= getdate()
and nombre_persona is not null
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
else
select @total_registros =
COUNT(distinct cuit) from monitoreos
left join padrones on (padrones.identificacion = cuit and
padrones.habilitado = 1 and
padrones.identificador in (select identificador from identificadores where country_code = 'AR'))
where monitoreos.cliente = @p_client_id
and nombre_persona is not null -- para saber que existe en padron
and (monitoreos.visible = 0 or monitoreos.fecha_vigencia_mantenimiento < getdate())
and not exists (select * from monitoreos mb where mb.cliente = monitoreos.cliente and mb.cuit = monitoreos.cuit and mb.seccion_mantenimiento = monitoreos.seccion_mantenimiento and mb.visible = 1 and mb.fecha_vigencia_mantenimiento >= getdate())
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
*/
select @total_registros = COUNT(distinct cuit) from @resultado
if @total_registros > 5000
set @mas_datos = 1
select top 5000 nombre_persona, cuit, identificador, id_padron, ultima_novedad as ultima_novedad_ymd, convert(varchar,ultima_novedad,103) as ultima_novedad,
fin_monitoreo as fin_monitoreo_ymd, convert(varchar,fin_monitoreo,103) as fin_monitoreo,
lista,comentarios,trazabilidad,
@mas_datos as mas_datos, null as error, @total_registros as total_registros
from @resultado
order by ultima_novedad_ymd desc, nombre_persona
END
GO
GO
/*
exec [monitoreo_lista] 806892136,1
exec [monitoreo_lista] 806892136,0
exec monitoreo_lista '2254875',1,1,'20336165009'
select * from clientes where cliente = 110864291
SELECT fecha, tabla, id_tabla, id_monitoreo
FROM monitoreos_resultados
WHERE Cuit = '30710074611'
and Fecha > getdate() - 365
and Fecha > '2022-02-23'
and seccion_mantenimiento in (select item from dbo.DelimitedSplit8K( '10,11,18,2,6,8,9',','))
order by fecha desc, id_monitoreo desc
*/
/*
Se pasa como parámetro el código de cliente,
devuelve la lista de todos los CUITs en monitoreo aún vigente,
y la fecha de última novedad encontrada (si es del último año)
va devolviendo de a 1000 cuits, porque cuando son muchos, tarda demasiado y el php muere por timeout
mandar como tercer paramentro: parte 1, despues 2, despues 3.... hasta que en el campo mas_datos devuelva
06/02/2025: No se devuelve mas de a grupos. Pero se devuelven solo 5000 registros, porque la Datatable se marea con mas de 5000
*/
CREATE OR ALTER PROCEDURE dbo.monitoreo_lista
@p_client_id int,
@p_activo bit = 1,
@p_parte int = 1,
@p_cuit varchar(20) = null
AS
BEGIN
SET NOCOUNT ON;
declare @mas_datos int = 0
/* 06/02/2025: No se hacen más los grupos de a 1000, se dicidió que solo tome 5000 reg
declare @cuits table (id int identity, cuit varchar(50))
if @p_activo = 1
begin
insert into @cuits (cuit)
select distinct cuit from monitoreos where cliente = @p_client_id
and monitoreos.visible = 1
and monitoreos.fecha_desde <= getdate() and monitoreos.fecha_vigencia_mantenimiento >= getdate()
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
order by cuit
end
else
begin
insert into @cuits (cuit)
select distinct cuit from monitoreos where cliente = @p_client_id
and (monitoreos.visible = 0 or monitoreos.fecha_vigencia_mantenimiento < getdate())
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
and not exists (select *
from monitoreos mb
where mb.cliente = monitoreos.cliente and mb.cuit = monitoreos.cuit
and mb.seccion_mantenimiento = monitoreos.seccion_mantenimiento
and mb.visible = 1 and mb.fecha_vigencia_mantenimiento >= getdate())
order by cuit
end
declare @mas_datos int = 0
if (select COUNT(*) from @cuits
where id between (@p_parte * 1000) - 999 and (@p_parte * 1000)) = 0
begin
select @mas_datos as mas_datos, 'sin datos' as error
return
end
if (select COUNT(*) from @cuits
where id > (@p_parte * 1000)) > 0
begin
set @mas_datos = 1
end
*/
/*
select
nombre_persona,
cuit,
convert(date,iif(max(monitoreos.fecha_ultimo_procesamiento) < getdate()-365,null, max(monitoreos.fecha_ultimo_procesamiento))) as ultima_novedad,
convert(date,max(monitoreos.fecha_vigencia_mantenimiento)) as fin_monitoreo
from monitoreos
left join padrones on (padrones.identificacion = cuit and
padrones.habilitado = 1 and
padrones.identificador in (select identificador from identificadores where country_code = 'AR'))
where monitoreos.cliente = @p_client_id
and monitoreos.visible = 1
and monitoreos.fecha_desde <= getdate() and monitoreos.fecha_vigencia_mantenimiento >= getdate()
--and (monitoreos.fecha_ultimo_procesamiento is null or monitoreos.fecha_ultimo_procesamiento between monitoreos.fecha_desde and monitoreos.fecha_vigencia_mantenimiento)
group by cuit, nombre_persona
order by ultima_novedad desc, nombre_persona asc
*/
declare @resultado table (nombre_persona varchar(500), cuit varchar(22), identificador varchar(20), id_padron int,
ultima_novedad date, fin_monitoreo date, inicio_monitoreo date,
lista varchar(512),comentarios varchar(max),trazabilidad varchar(max))
declare @nombre varchar(500),
@cuit varchar(22),
@ultima_novedad date,
@fin_monitoreo date,
@inicio_monitoreo date,
@seccion int,
@lista varchar(512),
@comentarios varchar(max),
@trazabilidad varchar(max)
declare @fecha datetime, @tabla varchar(100), @id_tabla int, @id_monitoreo int
if @p_activo = 1
begin
declare @fecha_modificacion date
declare C_Cursor CURSOR FOR
select
nombre_persona,
cuit, identificadores.abreviatura, padrones.id_padron,
dd.lista_secciones as lista,
dd2.comentarios, dd3.trazabilidad,
MAX(convert(date,fecha_desde)) as fecha_desde,
MAX(convert(date,fecha_vigencia_mantenimiento)) as fin_monitoreo,
MAX(convert(date,fecha_modificacion)) as fecha_modificacion
from monitoreos
left join padrones on (padrones.identificacion = cuit and
padrones.habilitado = 1 and
padrones.identificador in (select identificador from identificadores where country_code = 'AR'))
left join identificadores on (identificadores.identificador = padrones.identificador)
left join (select cliente as cli_sec, cuit as cuit_sec, fecha_vigencia_mantenimiento as fin, lista_secciones=STUFF(
(SELECT distinct ','+seccion_mantenimiento AS [text()]
FROM monitoreos XT
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente and XT.visible = 1
order by [text()]
FOR XML PATH('')), 1,1, '')
FROM monitoreos T where T.visible = 1
GROUP BY cliente, cuit, visible, fecha_vigencia_mantenimiento) dd
on (dd.cuit_sec = monitoreos.cuit
and dd.cli_sec = monitoreos.cliente
and dd.fin >= getdate())
left join (select cliente as cli_sec, cuit as cuit_sec, fecha_vigencia_mantenimiento as fin, comentarios=STUFF(
(SELECT distinct '|'+observaciones_cliente AS [text()]
FROM monitoreos XT
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente and XT.visible = 1
order by [text()]
FOR XML PATH('')), 1,1, '')
FROM monitoreos T where T.visible = 1
GROUP BY cliente, cuit, fecha_vigencia_mantenimiento) dd2
on (dd2.cuit_sec = monitoreos.cuit
and dd2.cli_sec = monitoreos.cliente
and dd2.fin >= getdate())
left join (select cliente as cli_sec, cuit as cuit_sec, trazabilidad=STUFF(
(SELECT '|'+ convert(varchar,created,103) + ' ' + iif(last_name is null and first_name is null, username,
isnull(last_name,'') + ' ' + isnull(first_name,'')) + ': ' +
detalle AS [text()]
FROM trazabilidad_monitoreos XT
left join users on users.user_id = XT.user_id
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente
order by created desc
FOR XML PATH('')), 1,1, '')
FROM trazabilidad_monitoreos T
GROUP BY cliente, cuit
) dd3
on (dd3.cuit_sec = monitoreos.cuit
and dd3.cli_sec = monitoreos.cliente
)
where monitoreos.cliente = @p_client_id
and monitoreos.visible = 1
and monitoreos.fecha_desde <= getdate() and monitoreos.fecha_vigencia_mantenimiento >= getdate()
and nombre_persona is not null -- para saber que existe en padron
--and cuit in (select cuit from @cuits where id between (@p_parte * 1000) - 999 and (@p_parte * 1000))
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
--order by nombre_persona
--order by cuit
group by
nombre_persona,
cuit, identificadores.abreviatura, padrones.id_padron,
dd.lista_secciones,
dd2.comentarios,
dd3.trazabilidad
order by fecha_modificacion desc
end
else
begin
declare C_Cursor CURSOR FOR
select
nombre_persona,
cuit, identificadores.abreviatura, padrones.id_padron,
dd.lista_secciones as lista,
dd2.comentarios,
dd3.trazabilidad,
MAX(convert(date,fecha_desde)) as fecha_desde,
MAX(convert(date,fecha_vigencia_mantenimiento)) as fin_monitoreo,
MAX(convert(date,fecha_modificacion)) as fecha_modificacion
from monitoreos
left join padrones on (padrones.identificacion = cuit and
padrones.habilitado = 1 and
padrones.identificador in (select identificador from identificadores where country_code = 'AR'))
left join identificadores on (identificadores.identificador = padrones.identificador)
left join (select cliente as cli_sec, cuit as cuit_sec, fecha_vigencia_mantenimiento as fin, lista_secciones=STUFF(
(SELECT distinct ','+seccion_mantenimiento AS [text()]
FROM monitoreos XT
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente and XT.visible = 0
and not exists (select * from monitoreos mb where mb.cliente = XT.cliente and mb.cuit = XT.cuit and mb.seccion_mantenimiento = XT.seccion_mantenimiento and mb.visible = 1 and mb.fecha_vigencia_mantenimiento >= getdate())
order by [text()]
FOR XML PATH('')), 1,1, '')
FROM monitoreos T where T.visible = 0
GROUP BY cliente, cuit, visible, fecha_vigencia_mantenimiento) dd
on (dd.cuit_sec = monitoreos.cuit
and dd.cli_sec = monitoreos.cliente
and dd.fin >= getdate())
left join (select cliente as cli_sec, cuit as cuit_sec, fecha_vigencia_mantenimiento as fin, comentarios=STUFF(
(SELECT distinct '|'+observaciones_cliente AS [text()]
FROM monitoreos XT
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente and XT.visible = 0
and not exists (select * from monitoreos mb where mb.cliente = XT.cliente and mb.cuit = XT.cuit and mb.seccion_mantenimiento = XT.seccion_mantenimiento and mb.visible = 1 and mb.fecha_vigencia_mantenimiento >= getdate())
order by [text()]
FOR XML PATH('')), 1,1, '')
FROM monitoreos T where T.visible = 0
GROUP BY cliente, cuit, visible, fecha_vigencia_mantenimiento) dd2
on (dd2.cuit_sec = monitoreos.cuit
and dd2.cli_sec = monitoreos.cliente
and dd2.fin >= getdate())
left join (select cliente as cli_sec, cuit as cuit_sec, trazabilidad=STUFF(
(SELECT '|'+ convert(varchar,created,103) + ' ' + iif(last_name is null and first_name is null, username,
isnull(last_name,'') + ' ' + isnull(first_name,'')) + ': ' +
detalle AS [text()]
FROM trazabilidad_monitoreos XT
left join users on users.user_id = XT.user_id
WHERE XT.cuit = T.cuit and XT.cliente = T.cliente
order by created desc
FOR XML PATH('')), 1,1, '')
FROM trazabilidad_monitoreos T
GROUP BY cliente, cuit
) dd3
on (dd3.cuit_sec = monitoreos.cuit
and dd3.cli_sec = monitoreos.cliente
)
where monitoreos.cliente = @p_client_id
and nombre_persona is not null -- para saber que existe en padron
and (monitoreos.visible = 0 or monitoreos.fecha_vigencia_mantenimiento < getdate())
-- Si vencieron hace mas de 1 año, chau, no los mostramos...
and monitoreos.fecha_vigencia_mantenimiento >= getdate() - 365
--
and not exists (select * from monitoreos mb where mb.cliente = monitoreos.cliente and mb.cuit = monitoreos.cuit and mb.seccion_mantenimiento = monitoreos.seccion_mantenimiento and mb.visible = 1 and mb.fecha_vigencia_mantenimiento >= getdate())
--and cuit in (select cuit from @cuits where id between (@p_parte * 1000) - 999 and (@p_parte * 1000))
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
--order by nombre_persona
--order by cuit
group by
nombre_persona,
cuit, identificadores.abreviatura, padrones.id_padron,
dd.lista_secciones,
dd2.comentarios,
dd3.trazabilidad
order by fecha_modificacion desc
end
declare @identificador varchar(20), @id_padron int
OPEN C_Cursor
FETCH NEXT FROM C_Cursor INTO @nombre, @cuit, @identificador, @id_padron, @lista, @comentarios, @trazabilidad, @inicio_monitoreo, @fin_monitoreo, @fecha_modificacion
WHILE @@fetch_status = 0
BEGIN
insert into @resultado(nombre_persona, cuit, identificador, id_padron,
ultima_novedad, fin_monitoreo, inicio_monitoreo,
lista,comentarios,trazabilidad)
values (@nombre, @cuit,@identificador,@id_padron, null, @fin_monitoreo, @inicio_monitoreo, @lista, @comentarios,@trazabilidad)
if @p_activo = 1 or @p_activo = 0 -- 07/02/2025: solo se hacia para activos, pero ahora se hace para inactivos también
begin
--> Busco fecha de ultima novedad
-- las fechas de novedad las corroboramos con las novedades registradas en monitoreos_resultados,
-- porque por ejemplo de cendeu tenemos que filtrar que haya cambiado la situacion
-- y además solo tenemos que mostrar novedades informadas en el último año (y que sean posteriores al inicio del monitoreo de ese cuit)
declare C_Resultados CURSOR FOR
SELECT fecha, tabla, id_tabla, id_monitoreo
FROM monitoreos_resultados
WHERE Cuit = @cuit
and Fecha > getdate() - 365
and Fecha > @inicio_monitoreo
and seccion_mantenimiento in (select convert(varchar,item) from dbo.DelimitedSplit8K( @lista,','))
order by fecha desc, id_monitoreo desc
OPEN C_Resultados
FETCH NEXT FROM C_Resultados INTO @fecha, @tabla, @id_tabla, @id_monitoreo
WHILE @@fetch_status = 0
BEGIN
if (@tabla like 'cendeu%') -- veo si cambio la situacion con respecto al mes anterior
begin
if not exists (select * from cendeu a
left join cendeu b on (b.iden = a.iden and convert(int,a.codigo_ent) = convert(int,b.codigo_ent) and b.vigente = 1
and b.fec_inf = (select max(fec_inf)
from cendeu c
where c.iden = a.iden and convert(int,a.codigo_ent) = convert(int,c.codigo_ent)
and c.fec_inf < a.fec_inf))
where a.id_cendeu = @id_tabla and a.vigente = 1
and (b.iden is null or convert(int,b.situacion) != convert(int,a.situacion)))
begin
-- si no hay cambio de situacion o deuda nueva sigo buscando
FETCH NEXT FROM C_Resultados INTO @fecha, @tabla, @id_tabla, @id_monitoreo
continue
end
end
UPDATE @resultado set ultima_novedad = @fecha where cuit = @cuit
break
END
CLOSE C_Resultados
DEALLOCATE C_Resultados
end
FETCH NEXT FROM C_Cursor INTO @nombre, @cuit, @identificador, @id_padron, @lista, @comentarios, @trazabilidad, @inicio_monitoreo, @fin_monitoreo, @fecha_modificacion
END
CLOSE C_Cursor
DEALLOCATE C_Cursor
declare @total_registros int = 0
/*
if @p_activo = 1
select @total_registros =
COUNT(distinct cuit) from monitoreos
left join padrones on (padrones.identificacion = cuit and
padrones.habilitado = 1 and
padrones.identificador in (select identificador from identificadores where country_code = 'AR'))
where monitoreos.cliente = @p_client_id
and monitoreos.visible = 1
and monitoreos.fecha_desde <= getdate() and monitoreos.fecha_vigencia_mantenimiento >= getdate()
and nombre_persona is not null
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
else
select @total_registros =
COUNT(distinct cuit) from monitoreos
left join padrones on (padrones.identificacion = cuit and
padrones.habilitado = 1 and
padrones.identificador in (select identificador from identificadores where country_code = 'AR'))
where monitoreos.cliente = @p_client_id
and nombre_persona is not null -- para saber que existe en padron
and (monitoreos.visible = 0 or monitoreos.fecha_vigencia_mantenimiento < getdate())
and not exists (select * from monitoreos mb where mb.cliente = monitoreos.cliente and mb.cuit = monitoreos.cuit and mb.seccion_mantenimiento = monitoreos.seccion_mantenimiento and mb.visible = 1 and mb.fecha_vigencia_mantenimiento >= getdate())
and monitoreos.cuit = iif(@p_cuit is null, monitoreos.cuit, @p_cuit)
*/
select @total_registros = COUNT(distinct cuit) from @resultado
if @total_registros > 5000
set @mas_datos = 1
select top 5000 nombre_persona, cuit, identificador, id_padron, ultima_novedad as ultima_novedad_ymd, convert(varchar,ultima_novedad,103) as ultima_novedad,
fin_monitoreo as fin_monitoreo_ymd, convert(varchar,fin_monitoreo,103) as fin_monitoreo,
lista,comentarios,trazabilidad,
@mas_datos as mas_datos, null as error, @total_registros as total_registros
from @resultado
order by ultima_novedad_ymd desc, nombre_persona
END
GO
Depends On
10Used By
No items found