dbo.padron_constancia_

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