Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
3| Name | Data Type | Length | Description |
|---|---|---|---|
| @accion | varchar | 50 | |
| @id_taken | int | 4 | |
| @id_tabla | int | 4 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
exec [padron_constancia_] 'insert'
exec [padron_constancia_] 'insert_inicial_monitoreos'
exec [padron_constancia_] 'LISTACUIL',1
select *, (select isnull(min(cp.queue_prioridad) ,255)
from ln_contrapartes c
inner join clientes_productos cp on cp.cliente = c.cliente and id_producto in (47,73,10)
where id_padron = padron_constancia.id_padron) as prioridad
from padron_constancia where proceso = 'contrapartes' and procesado = 0
update padron_constancia set prioridad = (select isnull(min(cp.queue_prioridad) ,255)
from ln_contrapartes c
inner join clientes_productos cp on cp.cliente = c.cliente and id_producto in (47,73,10)
where id_padron = padron_constancia.id_padron)
where proceso = 'contrapartes' and procesado = 0
select * from padron_constancia where proceso = 'contrapartes' and procesado = 0
*/
/*
Procesamiento:
Para ir tomando los lotes de CUITs a procesar:
https://produccion.fidelitas.com.ar/constancia-procesar?id_taken=
id_taken el de la instancia que te corresponde
Esta ejecución devuelve un lote de 100 CUITs a procesar, con los campos:
id, id_padron, identificacion
(identificacion es el CUIT a procesar)
Por cada CUIT que se procesa, hay que marcarlo como procesado,
https://produccion.fidelitas.com.ar/constancia-procesar-update?id=
id, el del registro que acabas de procesar
*/
/* Va devolviendo lotes de 100 CUILes */
CREATE OR ALTER PROCEDURE dbo.padron_constancia_
@accion varchar(50),
@id_taken int = 0,
@id_tabla int = null
AS
BEGIN
SET NOCOUNT ON;
declare @id_constancia int, @id_padron int, @cuit varchar(20), @proceso varchar(100), @prioridad int
if (UPPER(@accion) = 'INSERT' or UPPER(@accion) = 'INSERT_INICIAL' or UPPER(@accion) = 'INSERT_INICIAL_CONTRAPARTES' or UPPER(@accion) = 'INSERT_INICIAL_MONITOREOS')
begin
if (UPPER(@accion) = 'INSERT')
begin -- las dadas de alta en el día de ARG
DECLARE W_Cursor cursor for
select distinct 'contrapartes' as proceso, ln_contrapartes.id_padron, isnull(SQL.prioridad,255) as prioridad -- Las contrapartes dadas de alta ayer
from ln_contrapartes
inner join clientes on (clientes.cliente = ln_contrapartes.cliente and clientes.estado_cliente = 'A')
inner join ln_contraparte_familias on ln_contraparte_familias.contraparte = ln_contrapartes.contraparte
inner join ln_familias on (ln_familias.familia = ln_contraparte_familias.familia and LN_familias.visible = 1)
inner join LN_gestiones on (LN_gestiones.contraparte = LN_contrapartes.contraparte
and LN_gestiones.vigente = 1
and LN_gestiones.desde <= GETDATE() and LN_gestiones.hasta >= GETDATE())
inner join padrones on padrones.id_padron = ln_contrapartes.id_padron
left join (select cliente, min(queue_prioridad) as prioridad from clientes_productos where id_producto in (47,73,10) group by cliente) SQL
on SQL.cliente = ln_contrapartes.cliente
where ln_contrapartes.activo = 1 and ln_contrapartes.subcontratista = 0
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and convert(date,ln_contrapartes.created) = convert(date,getdate()-1)
and not exists (select * from padron_constancia where padron_constancia.id_padron = ln_contrapartes.id_padron and procesado = 0)
union
select distinct 'monitoreos' as proceso, padrones.id_padron, 255 as prioridad -- Los cuits puestos en monitoreo ayer
from monitoreos
inner join padrones on padrones.identificacion = monitoreos.cuit
inner join clientes on (clientes.cliente = monitoreos.cliente and clientes.estado_cliente = 'A')
--left join clientes_productos on (clientes_productos.cliente = monitoreos.cliente and clientes_productos.id_producto = 16 and clientes_productos.activo = 1)
where convert(date,monitoreos.created) = convert(date,getdate()-1)
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and not exists (select * from padron_constancia where padron_constancia.id_padron = padrones.id_padron and procesado = 0)
order by proceso
end
if (UPPER(@accion) = 'INSERT_INICIAL')
begin -- todas las contrapartes activas de ARG
DECLARE W_Cursor cursor for
select distinct 'contrapartes' as proceso, ln_contrapartes.id_padron, isnull(SQL.prioridad,255) as prioridad
from ln_contrapartes
inner join clientes on (clientes.cliente = ln_contrapartes.cliente and clientes.estado_cliente = 'A')
inner join ln_contraparte_familias on ln_contraparte_familias.contraparte = ln_contrapartes.contraparte
inner join ln_familias on (ln_familias.familia = ln_contraparte_familias.familia and LN_familias.visible = 1)
inner join LN_gestiones on (LN_gestiones.contraparte = LN_contrapartes.contraparte
and LN_gestiones.vigente = 1
and LN_gestiones.desde <= GETDATE() and LN_gestiones.hasta >= GETDATE())
inner join padrones on padrones.id_padron = ln_contrapartes.id_padron
left join (select cliente, min(queue_prioridad) as prioridad from clientes_productos where id_producto in (47,73,10) group by cliente) SQL
on SQL.cliente = ln_contrapartes.cliente
where ln_contrapartes.activo = 1 and ln_contrapartes.subcontratista = 0
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and not exists (select * from padron_constancia where padron_constancia.id_padron = ln_contrapartes.id_padron and procesado = 0)
union -- Todos los cuits en monitoreo
select distinct 'monitoreos' as proceso, padrones.id_padron, 255 as prioridad
from monitoreos
inner join padrones on padrones.identificacion = monitoreos.cuit
inner join clientes on (clientes.cliente = monitoreos.cliente and clientes.estado_cliente = 'A')
inner join clientes_productos on clientes_productos.cliente = monitoreos.cliente and clientes_productos.id_producto = 16 and clientes_productos.activo = 1
where monitoreos.fecha_vigencia_mantenimiento >= getdate()
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and not exists (select * from padron_constancia where padron_constancia.id_padron = padrones.id_padron and procesado = 0)
order by proceso
end
if (UPPER(@accion) = 'INSERT_INICIAL_CONTRAPARTES')
begin -- todas las contrapartes activas de ARG
DECLARE W_Cursor cursor for
select distinct 'contrapartes' as proceso, ln_contrapartes.id_padron, isnull(SQL.prioridad,255) as prioridad
from ln_contrapartes
inner join clientes on (clientes.cliente = ln_contrapartes.cliente and clientes.estado_cliente = 'A')
inner join ln_contraparte_familias on ln_contraparte_familias.contraparte = ln_contrapartes.contraparte
inner join ln_familias on (ln_familias.familia = ln_contraparte_familias.familia and LN_familias.visible = 1)
inner join LN_gestiones on (LN_gestiones.contraparte = LN_contrapartes.contraparte
and LN_gestiones.vigente = 1
and LN_gestiones.desde <= GETDATE() and LN_gestiones.hasta >= GETDATE())
inner join padrones on padrones.id_padron = ln_contrapartes.id_padron
left join (select cliente, min(queue_prioridad) as prioridad from clientes_productos where id_producto in (47,73,10) group by cliente) SQL
on SQL.cliente = ln_contrapartes.cliente
where ln_contrapartes.activo = 1 and ln_contrapartes.subcontratista = 0
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and not exists (select * from padron_constancia where padron_constancia.id_padron = ln_contrapartes.id_padron and procesado = 0)
end
if (UPPER(@accion) = 'INSERT_INICIAL_MONITOREOS')
begin -- todos los cuits de ARG en monitoreo vigente
DECLARE W_Cursor cursor for
select distinct 'monitoreos' as proceso, padrones.id_padron, 255 as prioridad
from monitoreos
inner join padrones on padrones.identificacion = monitoreos.cuit
inner join clientes on (clientes.cliente = monitoreos.cliente and clientes.estado_cliente = 'A')
inner join clientes_productos on clientes_productos.cliente = monitoreos.cliente and clientes_productos.id_producto = 16 and clientes_productos.activo = 1
where monitoreos.fecha_vigencia_mantenimiento >= getdate()
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and not exists (select * from padron_constancia where padron_constancia.id_padron = padrones.id_padron and procesado = 0)
end
OPEN W_cursor
Fetch next from W_cursor INTO @proceso, @id_padron, @prioridad
WHILE @@fetch_status = 0
BEGIN
declare @fecha_procesado date = null
declare @id int = null
select top 1 @id = id,
@fecha_procesado = fecha_procesado
from padron_constancia
where id_padron = @id_padron
and visible = 1
order by fecha_procesado desc
if (@id is null)
begin
insert into padron_constancia (id_padron,proceso,prioridad) values (@id_padron,@proceso,@prioridad)
end
else
begin
if (@fecha_procesado is not null and @fecha_procesado < getdate() - (30*6)) -- 6 meses
begin
update padron_constancia set visible = 0 where id = @id
insert into padron_constancia (id_padron, proceso) values (@id_padron, @proceso)
end
end
Fetch next from W_cursor INTO @proceso, @id_padron, @prioridad
END
CLOSE W_cursor
DEALLOCATE W_cursor
return
--
end
if (UPPER(@accion) = 'LISTACUIL') begin
/*
-- para un CUIT en particular:
select 0 as id, 32448828 as id_padron, '30710527993' as identificacion, 1 as prioridad
return
*/
declare wc cursor for
select top 40 id, id_padron, proceso, prioridad
from padron_constancia
where isnull(procesado,0) = 0
and isnull(visible,1) = 1
and isnull(id_taken,0) = 0
order by proceso, prioridad
declare @cantidad int = 0
open wc
Fetch next from wc INTO @id_constancia, @id_padron, @proceso, @prioridad
WHILE @@fetch_status = 0
BEGIN
update padron_constancia
set id_taken = @id_taken
where id = @id_constancia
set @cantidad = @cantidad + 1
Fetch next from wc INTO @id_constancia, @id_padron, @proceso, @prioridad
END
CLOSE wc
DEALLOCATE wc
if ( @cantidad < 40 ) -- busco si hay algo que ya cumplio 6 meses para reprocesar
begin
declare wc2 cursor for
select top (40-@cantidad) id, id_padron, proceso, prioridad
from padron_constancia
where isnull(procesado,0) = 1
and isnull(visible,1) = 1
and (fecha_procesado < getdate() - (30*6)) -- 6 meses
order by proceso, prioridad
open wc2
Fetch next from wc2 INTO @id_constancia, @id_padron, @proceso, @prioridad
WHILE @@fetch_status = 0
BEGIN
update padron_constancia set visible = 0 where id = @id_constancia
insert into padron_constancia (id_padron,id_taken,proceso,prioridad) values (@id_padron,@id_taken,@proceso,@prioridad)
Fetch next from wc2 INTO @id_constancia, @id_padron, @proceso, @prioridad
END
CLOSE wc2
DEALLOCATE wc2
end
select top 40 padron_constancia.id, padron_constancia.id_padron, padrones.identificacion,isnull(prioridad,255) as prioridad
from padron_constancia
inner join padrones on padrones.id_padron = padron_constancia.id_padron
where isnull(procesado,0) = 0
and isnull(visible,1) = 1
and isnull(id_taken,0) = @id_taken
order by isnull(prioridad,255)
return
end
-- marca como procesado = 1, ese id
if (UPPER(@accion) = 'UPDATE')
begin
update padron_constancia
set procesado = 1, fecha_procesado = getdate()
where id = @id_tabla
select 'ok'
return
end
END
GO
GO
/*
exec [padron_constancia_] 'insert'
exec [padron_constancia_] 'insert_inicial_monitoreos'
exec [padron_constancia_] 'LISTACUIL',1
select *, (select isnull(min(cp.queue_prioridad) ,255)
from ln_contrapartes c
inner join clientes_productos cp on cp.cliente = c.cliente and id_producto in (47,73,10)
where id_padron = padron_constancia.id_padron) as prioridad
from padron_constancia where proceso = 'contrapartes' and procesado = 0
update padron_constancia set prioridad = (select isnull(min(cp.queue_prioridad) ,255)
from ln_contrapartes c
inner join clientes_productos cp on cp.cliente = c.cliente and id_producto in (47,73,10)
where id_padron = padron_constancia.id_padron)
where proceso = 'contrapartes' and procesado = 0
select * from padron_constancia where proceso = 'contrapartes' and procesado = 0
*/
/*
Procesamiento:
Para ir tomando los lotes de CUITs a procesar:
https://produccion.fidelitas.com.ar/constancia-procesar?id_taken=
id_taken el de la instancia que te corresponde
Esta ejecución devuelve un lote de 100 CUITs a procesar, con los campos:
id, id_padron, identificacion
(identificacion es el CUIT a procesar)
Por cada CUIT que se procesa, hay que marcarlo como procesado,
https://produccion.fidelitas.com.ar/constancia-procesar-update?id=
id, el del registro que acabas de procesar
*/
/* Va devolviendo lotes de 100 CUILes */
CREATE OR ALTER PROCEDURE dbo.padron_constancia_
@accion varchar(50),
@id_taken int = 0,
@id_tabla int = null
AS
BEGIN
SET NOCOUNT ON;
declare @id_constancia int, @id_padron int, @cuit varchar(20), @proceso varchar(100), @prioridad int
if (UPPER(@accion) = 'INSERT' or UPPER(@accion) = 'INSERT_INICIAL' or UPPER(@accion) = 'INSERT_INICIAL_CONTRAPARTES' or UPPER(@accion) = 'INSERT_INICIAL_MONITOREOS')
begin
if (UPPER(@accion) = 'INSERT')
begin -- las dadas de alta en el día de ARG
DECLARE W_Cursor cursor for
select distinct 'contrapartes' as proceso, ln_contrapartes.id_padron, isnull(SQL.prioridad,255) as prioridad -- Las contrapartes dadas de alta ayer
from ln_contrapartes
inner join clientes on (clientes.cliente = ln_contrapartes.cliente and clientes.estado_cliente = 'A')
inner join ln_contraparte_familias on ln_contraparte_familias.contraparte = ln_contrapartes.contraparte
inner join ln_familias on (ln_familias.familia = ln_contraparte_familias.familia and LN_familias.visible = 1)
inner join LN_gestiones on (LN_gestiones.contraparte = LN_contrapartes.contraparte
and LN_gestiones.vigente = 1
and LN_gestiones.desde <= GETDATE() and LN_gestiones.hasta >= GETDATE())
inner join padrones on padrones.id_padron = ln_contrapartes.id_padron
left join (select cliente, min(queue_prioridad) as prioridad from clientes_productos where id_producto in (47,73,10) group by cliente) SQL
on SQL.cliente = ln_contrapartes.cliente
where ln_contrapartes.activo = 1 and ln_contrapartes.subcontratista = 0
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and convert(date,ln_contrapartes.created) = convert(date,getdate()-1)
and not exists (select * from padron_constancia where padron_constancia.id_padron = ln_contrapartes.id_padron and procesado = 0)
union
select distinct 'monitoreos' as proceso, padrones.id_padron, 255 as prioridad -- Los cuits puestos en monitoreo ayer
from monitoreos
inner join padrones on padrones.identificacion = monitoreos.cuit
inner join clientes on (clientes.cliente = monitoreos.cliente and clientes.estado_cliente = 'A')
--left join clientes_productos on (clientes_productos.cliente = monitoreos.cliente and clientes_productos.id_producto = 16 and clientes_productos.activo = 1)
where convert(date,monitoreos.created) = convert(date,getdate()-1)
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and not exists (select * from padron_constancia where padron_constancia.id_padron = padrones.id_padron and procesado = 0)
order by proceso
end
if (UPPER(@accion) = 'INSERT_INICIAL')
begin -- todas las contrapartes activas de ARG
DECLARE W_Cursor cursor for
select distinct 'contrapartes' as proceso, ln_contrapartes.id_padron, isnull(SQL.prioridad,255) as prioridad
from ln_contrapartes
inner join clientes on (clientes.cliente = ln_contrapartes.cliente and clientes.estado_cliente = 'A')
inner join ln_contraparte_familias on ln_contraparte_familias.contraparte = ln_contrapartes.contraparte
inner join ln_familias on (ln_familias.familia = ln_contraparte_familias.familia and LN_familias.visible = 1)
inner join LN_gestiones on (LN_gestiones.contraparte = LN_contrapartes.contraparte
and LN_gestiones.vigente = 1
and LN_gestiones.desde <= GETDATE() and LN_gestiones.hasta >= GETDATE())
inner join padrones on padrones.id_padron = ln_contrapartes.id_padron
left join (select cliente, min(queue_prioridad) as prioridad from clientes_productos where id_producto in (47,73,10) group by cliente) SQL
on SQL.cliente = ln_contrapartes.cliente
where ln_contrapartes.activo = 1 and ln_contrapartes.subcontratista = 0
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and not exists (select * from padron_constancia where padron_constancia.id_padron = ln_contrapartes.id_padron and procesado = 0)
union -- Todos los cuits en monitoreo
select distinct 'monitoreos' as proceso, padrones.id_padron, 255 as prioridad
from monitoreos
inner join padrones on padrones.identificacion = monitoreos.cuit
inner join clientes on (clientes.cliente = monitoreos.cliente and clientes.estado_cliente = 'A')
inner join clientes_productos on clientes_productos.cliente = monitoreos.cliente and clientes_productos.id_producto = 16 and clientes_productos.activo = 1
where monitoreos.fecha_vigencia_mantenimiento >= getdate()
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and not exists (select * from padron_constancia where padron_constancia.id_padron = padrones.id_padron and procesado = 0)
order by proceso
end
if (UPPER(@accion) = 'INSERT_INICIAL_CONTRAPARTES')
begin -- todas las contrapartes activas de ARG
DECLARE W_Cursor cursor for
select distinct 'contrapartes' as proceso, ln_contrapartes.id_padron, isnull(SQL.prioridad,255) as prioridad
from ln_contrapartes
inner join clientes on (clientes.cliente = ln_contrapartes.cliente and clientes.estado_cliente = 'A')
inner join ln_contraparte_familias on ln_contraparte_familias.contraparte = ln_contrapartes.contraparte
inner join ln_familias on (ln_familias.familia = ln_contraparte_familias.familia and LN_familias.visible = 1)
inner join LN_gestiones on (LN_gestiones.contraparte = LN_contrapartes.contraparte
and LN_gestiones.vigente = 1
and LN_gestiones.desde <= GETDATE() and LN_gestiones.hasta >= GETDATE())
inner join padrones on padrones.id_padron = ln_contrapartes.id_padron
left join (select cliente, min(queue_prioridad) as prioridad from clientes_productos where id_producto in (47,73,10) group by cliente) SQL
on SQL.cliente = ln_contrapartes.cliente
where ln_contrapartes.activo = 1 and ln_contrapartes.subcontratista = 0
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and not exists (select * from padron_constancia where padron_constancia.id_padron = ln_contrapartes.id_padron and procesado = 0)
end
if (UPPER(@accion) = 'INSERT_INICIAL_MONITOREOS')
begin -- todos los cuits de ARG en monitoreo vigente
DECLARE W_Cursor cursor for
select distinct 'monitoreos' as proceso, padrones.id_padron, 255 as prioridad
from monitoreos
inner join padrones on padrones.identificacion = monitoreos.cuit
inner join clientes on (clientes.cliente = monitoreos.cliente and clientes.estado_cliente = 'A')
inner join clientes_productos on clientes_productos.cliente = monitoreos.cliente and clientes_productos.id_producto = 16 and clientes_productos.activo = 1
where monitoreos.fecha_vigencia_mantenimiento >= getdate()
and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
and not exists (select * from padron_constancia where padron_constancia.id_padron = padrones.id_padron and procesado = 0)
end
OPEN W_cursor
Fetch next from W_cursor INTO @proceso, @id_padron, @prioridad
WHILE @@fetch_status = 0
BEGIN
declare @fecha_procesado date = null
declare @id int = null
select top 1 @id = id,
@fecha_procesado = fecha_procesado
from padron_constancia
where id_padron = @id_padron
and visible = 1
order by fecha_procesado desc
if (@id is null)
begin
insert into padron_constancia (id_padron,proceso,prioridad) values (@id_padron,@proceso,@prioridad)
end
else
begin
if (@fecha_procesado is not null and @fecha_procesado < getdate() - (30*6)) -- 6 meses
begin
update padron_constancia set visible = 0 where id = @id
insert into padron_constancia (id_padron, proceso) values (@id_padron, @proceso)
end
end
Fetch next from W_cursor INTO @proceso, @id_padron, @prioridad
END
CLOSE W_cursor
DEALLOCATE W_cursor
return
--
end
if (UPPER(@accion) = 'LISTACUIL') begin
/*
-- para un CUIT en particular:
select 0 as id, 32448828 as id_padron, '30710527993' as identificacion, 1 as prioridad
return
*/
declare wc cursor for
select top 40 id, id_padron, proceso, prioridad
from padron_constancia
where isnull(procesado,0) = 0
and isnull(visible,1) = 1
and isnull(id_taken,0) = 0
order by proceso, prioridad
declare @cantidad int = 0
open wc
Fetch next from wc INTO @id_constancia, @id_padron, @proceso, @prioridad
WHILE @@fetch_status = 0
BEGIN
update padron_constancia
set id_taken = @id_taken
where id = @id_constancia
set @cantidad = @cantidad + 1
Fetch next from wc INTO @id_constancia, @id_padron, @proceso, @prioridad
END
CLOSE wc
DEALLOCATE wc
if ( @cantidad < 40 ) -- busco si hay algo que ya cumplio 6 meses para reprocesar
begin
declare wc2 cursor for
select top (40-@cantidad) id, id_padron, proceso, prioridad
from padron_constancia
where isnull(procesado,0) = 1
and isnull(visible,1) = 1
and (fecha_procesado < getdate() - (30*6)) -- 6 meses
order by proceso, prioridad
open wc2
Fetch next from wc2 INTO @id_constancia, @id_padron, @proceso, @prioridad
WHILE @@fetch_status = 0
BEGIN
update padron_constancia set visible = 0 where id = @id_constancia
insert into padron_constancia (id_padron,id_taken,proceso,prioridad) values (@id_padron,@id_taken,@proceso,@prioridad)
Fetch next from wc2 INTO @id_constancia, @id_padron, @proceso, @prioridad
END
CLOSE wc2
DEALLOCATE wc2
end
select top 40 padron_constancia.id, padron_constancia.id_padron, padrones.identificacion,isnull(prioridad,255) as prioridad
from padron_constancia
inner join padrones on padrones.id_padron = padron_constancia.id_padron
where isnull(procesado,0) = 0
and isnull(visible,1) = 1
and isnull(id_taken,0) = @id_taken
order by isnull(prioridad,255)
return
end
-- marca como procesado = 1, ese id
if (UPPER(@accion) = 'UPDATE')
begin
update padron_constancia
set procesado = 1, fecha_procesado = getdate()
where id = @id_tabla
select 'ok'
return
end
END
GO