dbo.mis_aportes_procesar_PRUEBA

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

5
Name Data Type Length Description
@accion varchar 50
@cliente int 4
@id_taken int 4
@proceso int 4
@id_tabla int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/* 
exec [mis_aportes_procesar_] 'insert'
exec [mis_aportes_procesar_] 'LISTACUIL',0,1
exec [mis_aportes_procesar_] 'LISTACUIL', 431136419,1

select procesado, count(*) from mis_aportes_procesar         group by procesado 
select procesado, count(*) from  mis_aportes_procesar_padron group by procesado

*/

/* Va devolviendo lotes de 100 CUILes */
CREATE OR ALTER PROCEDURE dbo.mis_aportes_procesar_PRUEBA
@accion varchar(50), 
@cliente int = null,
@id_taken int = 0, 
@proceso int = null, 
@id_tabla int = null 
AS
BEGIN
/* procesado = 0: NO PROCESADO, procesado = 1: YA PROCESADO, procesado = 2: NO TIENE EMPLEADOS */
 SET NOCOUNT ON;
 declare @cant int = 0
    declare @cantidad_empleados int = 0
    declare @id int 
    declare @cli int 
 declare @cuit varchar(20)
 declare @respuesta table (cliente int, cuit varchar(20), cuil varchar(20), nro varchar(200), id bigint)
 
 declare @mes_empleados1 date = (select max(fuentes.fecha) from (select top 2 (fecha_informacion) fecha  from fuentes_procesadas where fuente = 'empleados' order by fecha_informacion desc) fuentes)
    declare @periodo1 int
 set @periodo1 = convert(int,substring(convert(char,@mes_empleados1),3,2)+substring(convert(char,@mes_empleados1),6,2))
 --select @periodo1
 declare @periodo_maximo int = null 

 if (UPPER(@accion) = 'INSERT') begin

  if DATEPART(dd, getdate()) = 26
  begin
   delete from [mis_aportes_procesar] 
  end

  insert into [mis_aportes_procesar](cliente, contraparte, cuit, procesado) 
  select distinct ln_contrapartes.cliente, ln_contrapartes.contraparte, padrones.identificacion, 0 as procesado
  from ln_contrapartes
  inner join clientes on (clientes.cliente = ln_contrapartes.cliente and clientes.estado_cliente = 'A')
  inner join clientes_productos on (clientes_productos.cliente = ln_contrapartes.cliente and 
                                    clientes_productos.id_producto = ln_contrapartes.servicio_contratado and 
            clientes_productos.activo = 1)
  inner join ln_contraparte_familias on ln_contraparte_familias.contraparte = ln_contrapartes.contraparte 
  inner join LN_gestiones on LN_gestiones.contraparte = LN_contrapartes.contraparte
  inner join padrones on padrones.id_padron = ln_contrapartes.id_padron 
  where ln_contrapartes.cliente in  
  (select cliente from ln_cliente_productos where activo = 1 and producto in (select producto from mis_aportes_productos))
  and ln_contraparte_familias.familia in (select familia from ln_familia_productos 
                where ln_familia_productos.activo = 1 and ln_familia_productos.producto 
             in (select producto from mis_aportes_productos)
               )
  and ln_contrapartes.activo = 1 
  and LN_gestiones.vigente = 1 and LN_gestiones.desde <= GETDATE() and LN_gestiones.hasta >= GETDATE()
  and padrones.identificador in (select identificador from identificadores where country_code = 'AR')
  and iif(DATEPART(dd, getdate()) = 26 or ln_contrapartes.created >= getdate()-1,1,0) = 1
  
  -- 30/10/2024: 
  -- Ya marco los que no hay que procesar porque no tienen empleados, o porque se consultaron en el ultimo tiempo
  -- para que luego, la accion LISTACUIL no tarde tanto, buscandolos
  declare wc1 cursor for
    select id, cuit, cliente
     from [mis_aportes_procesar]
    where procesado = 0 
    and cliente = iif(isnull(@cliente,0)!=0,@cliente,cliente) 

  open wc1
  Fetch next from wc1 INTO @id, @cuit, @cli 
 
  WHILE @@fetch_status = 0
  BEGIN
   select @cantidad_empleados = count(*) 
      from empleados  
     where periodo >= @periodo1
       and cuil is not null 
       and cuit = @cuit

   if (@cantidad_empleados = 0)
   begin
     update [mis_aportes_procesar] set procesado = 2 where id = @id 
    Fetch next from wc1 INTO @id, @cuit, @cli 
    continue
   end 

   select @periodo_maximo = max(periodo) from mis_aportes where cuit_empleador = @cuit and ddjj not like 'NO PRESENTA%'
   if (@periodo_maximo is not null
      and 
        ((@periodo_maximo >= dbo.PeriodoVencido() and DATEPART(dd, getdate()) > 20)
        or 
     (@periodo_maximo >= dbo.PeriodoMenosDos() and DATEPART(dd, getdate()) <= 20)))
   begin
    update [mis_aportes_procesar] set procesado = 1, periodo = @periodo_maximo where id = @id 
    Fetch next from wc1 INTO @id, @cuit, @cli 
    continue
   end 
   Fetch next from wc1 INTO @id, @cuit, @cli 
  END
  CLOSE wc1
  DEALLOCATE wc1
  return
  -- 
 end 

    

    if (UPPER(@accion) = 'LISTACUIL') begin
  if isnull(@cliente,0)!=0
   declare wc cursor for
     select id, cuit, cliente
      from [mis_aportes_procesar]
     where procesado = 0 
     and cliente = @cliente 
  else 
   declare wc cursor for
     select id, cuit, cliente
      from [mis_aportes_procesar]
     where procesado = 0 

  open wc
  Fetch next from wc INTO @id, @cuit, @cli 
  WHILE @@fetch_status = 0
  BEGIN
   /*
    select '1',getdate()
    select @cantidad_empleados = count(*) 
      from empleados  
     where periodo >= @periodo1
       and cuil is not null 
       and cuit = @cuit
        and not exists (select * from mis_aportes_error 
                         where mis_aportes_error.cuil = empleados.cuil 
           and mis_aportes_error.fecha_reintento > getdate())
       */

/* 
--Ejemplo: para probar si lo hace rapido, y si.
select count(*) 
  from empleados  
 where periodo >= 2407
   and cuil is not null 
   and cuit = '30710687842'
    and not exists (select * from mis_aportes_error 
                     where mis_aportes_error.cuil = empleados.cuil 
       and mis_aportes_error.fecha_reintento > getdate())
*/


  select '2',getdate()

   if (@cantidad_empleados = 0)
   begin
  select '3',getdate()

     update [mis_aportes_procesar] set procesado = 2 where id = @id 
    Fetch next from wc INTO @id, @cuit, @cli 
    continue
   end 
  select '4',getdate()

   select @periodo_maximo = max(periodo) from mis_aportes where cuit_empleador = @cuit and ddjj not like 'NO PRESENTA%'
   /*
    select max(periodo) from mis_aportes where cuit_empleador = '30710687842' and ddjj not like 'NO PRESENTA%'
    select dbo.PeriodoVencido()
    select dbo.PeriodoMenosDos()
    */

   if (@periodo_maximo is not null
      and 
        ((@periodo_maximo >= dbo.PeriodoVencido() and DATEPART(dd, getdate()) > 20)
        or 
     (@periodo_maximo >= dbo.PeriodoMenosDos() and DATEPART(dd, getdate()) <= 20)))
   begin
  select '5',getdate()

    update [mis_aportes_procesar] set procesado = 1, periodo = @periodo_maximo where id = @id 
    Fetch next from wc INTO @id, @cuit, @cli 
    continue
   end 
  select '6',getdate()

   select @cuit, @periodo1,@periodo_maximo,dbo.PeriodoVencido(), dbo.PeriodoMenosDos()
   insert into @respuesta (cliente, cuit, cuil, nro, id) 
   select top 4 @cli, @cuit, cuil, newid(), @id 
    from empleados  
    where periodo >= @periodo1
    and cuil is not null 
    and cuit = @cuit
    and not exists (select * from mis_aportes_error 
                     where mis_aportes_error.cuil = empleados.cuil 
           and mis_aportes_error.fecha_reintento > getdate())
   order by newid()
   /* 
    --Ejemplo: para probar si lo hace rapido, y si.
    select top 4 cuil, newid() 
    from empleados  
    where periodo >= 2407
    and cuil is not null 
    and cuit = '30710687842'
    and not exists (select * from mis_aportes_error 
                     where mis_aportes_error.cuil = empleados.cuil 
       and mis_aportes_error.fecha_reintento > getdate())
    order by newid()
    */


  select '7',getdate()

   if (select count(distinct cuil) from @respuesta) > 6 break
   /*
    set @cant = @cant + 1 
    if (@cant >= 500) break
    */

   Fetch next from wc INTO @id, @cuit, @cli 
  END
  CLOSE wc
  DEALLOCATE wc 
   
/*
-- Busco personas al azar 
declare @faltan int = (select count(distinct cuil) from @respuesta) 
declare @faltan_padron int = (select count(*) from mis_aportes_procesar_padron where id_taken = @id_taken and isnull(procesado,0) = 0) 

declare @fecha datetime = getdate() 
declare @unanio datetime = getdate() - 365 
declare @periodo int = (year(getdate()) - 1) * 100 + month(getdate())

if (isnull(@cliente,0)=0)
begin
if ((@faltan + @faltan_padron) < 10)
begin
set @faltan = 10 - (@faltan + @faltan_padron)
BEGIN TRANSACTION
insert into mis_aportes_procesar_padron (cuil, created, id_taken)
select top (@faltan) p.identificacion, @fecha, @id_taken 
 from padrones p
inner join datos_personas d on d.c01_cuit = p.identificacion 
where p.habilitado = 1 
  and p.tipo_persona = 'F'
  and p.identificador in (select identificador from identificadores where country_code = 'AR')
  and d.visible = 1 
  and d.fecha_defuncion is null 
  and d.c02_fecha_nac is not null 
  and d.c02_fecha_nac <= dateadd(year,-18,getdate())
  and d.c02_fecha_nac >= dateadd(year,-65,getdate())
  and not exists (select * from mis_aportes_error 
   where mis_aportes_error.cuil = p.identificacion
 and mis_aportes_error.fecha_reintento > getdate())
  and (select isnull(max(periodo),190001) from mis_aportes where cuit_empleador = p.identificacion) <= @periodo 
  and (select isnull(max(periodo),190001) from mis_aportes where cuit = p.identificacion) <= @periodo
  and (select isnull(max(created),'1900-01-01') from mis_aportes_procesar_padron where cuil = p.identificacion) <= @unanio
COMMIT TRANSACTION

end
end
*/
  
return
  if (isnull(@cliente,0)=0)
  begin
   SELECT TOP 100 SQL.* FROM (select '1' as proceso, id, cuil as CUIL from @respuesta 
           union 
          --select '2' as proceso, id, cuil as CUIL from mis_aportes_procesar_padron where created = @fecha 
          select '2' as proceso, id, cuil as CUIL from mis_aportes_procesar_padron 
           where id_taken = @id_taken and isnull(procesado,0) = 0
            ) SQL
  end
  else
  begin
   select TOP 100 '1' as proceso, id, cuil as CUIL from @respuesta 
  end
  return
 end

 -- marca como 3, los que pasaron por el proceso de ir a buscar a mis aportes de Diego
 if (UPPER(@accion) = 'UPDATE') 
 begin
  if (@proceso = 2)
  begin
   update mis_aportes_procesar_padron 
      set procesado = 3, procesado_fecha = getdate()
    where id = @id_tabla
  end
  if (@proceso = 1)
  -- Aca los marca como 1 cuando los toma, para que otro no los tome 
  -- los marca como 2 cuando no tiene empleados 
  -- los marca como 3 cuando ya se procesaron 
  begin
   update mis_aportes_procesar  
      set procesado = 3 
    where id = @id_tabla
  end
  select 'ok'
  return
 end
END 

GO

Used By

No items found