dbo.amx_base_empleados_

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

2
Name Data Type Length Description
@paso smallint 2
@cantidad int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/* AMX Base de empleados y familiares
Paso 1: Borrar 
todo el contenido de la tabla amx_base_empleados
select  * from amx_base_empleados
delete from amx_base_empleados

Paso 2: Cargar el archivo que nos mandan, en las columnas 
        pais, DNI, empleado, relacion (en el caso de los parientes en el campo dni el numero del parinte y en el campo empleado cargamos el nro de dni del empleado)
Paso 3: Correr el stored: exec amx_base_empleados_ 1,3000 --> completa cuits, 
    --> si se quiere mandar como 2° parametros la cantidad de registros, 
--> para procesar de a lotes... 
--> Hay que procesar hasta que no quede nada en procesado = 0
Paso 4: Correr el stored: exec amx_base_empleados_ 2 --> carga en la tabla LN_control_screening
Paso 5: Pasamos 
todo lo anterior a no visible 
    update LN_control_screening set visible = 0, vigencia_hasta = convert(date,getdate()-1) 
        where cliente = 5546348 and visible = 1 and convert(date,vigencia_desde) != convert(date,getdate())


*/

CREATE OR ALTER PROCEDURE dbo.amx_base_empleados_
@paso smallint = 1,
@cantidad int = 999999
AS
BEGIN
  SET NOCOUNT ON;
  
if (@paso = 1) 
  begin 

 if (select count(*) 
    from amx_base_empleados 
   where procesado = 0) = 0
 begin
  select 'NO HAY NADA MAS PARA PROCESAR' 
  return
 end 

   -- Elimino los registros que tienen como DNI = 'sin datos'
 delete from amx_base_empleados where dni like '%sin%datos%' and procesado = 0 
 -- Los registros que el campo epleado dice 'sin datos', le pongo null al campo empleado 
 update amx_base_empleados set empleado = null where empleado like '%sin%datos%' and procesado = 0 
    -- Elimino caracteres especiales en los documentos, dejo solo los numeros y letras 
 update amx_base_empleados set dni =  LTRIM(rtrim(dbo.fn_StripCharacters(dni, '^A-Z0-9/'))) where procesado = 0 
 update amx_base_empleados set empleado =  LTRIM(rtrim(dbo.fn_StripCharacters(empleado, '^A-Z0-9/'))) where procesado = 0 
 -- Si no es de argentina, o es de argentina pero es de mas de 8 digitos, se toma como cuit
 update amx_base_empleados set cuit = dni, procesado = 1 where (len(dni) > 8 or pais != 'AR') and procesado = 0

 update amx_base_empleados set relacion = null where relacion like '%FIDELITAS%'or relacion like '%Verificar%'or relacion like '%sin datos%' or relacion = '' and procesado = 0

  
 declare @dni  varchar(50) 
 declare @dni1 varchar(8)
 declare @dni2 varchar(8)
 declare @cuit varchar(20) 
 declare @id bigint 
 declare @cant int 
 declare @pais varchar(2)
 declare @empleado varchar(20)
 
 DECLARE C_cursor CURSOR FOR
  select top (isnull(@cantidad,999999)) dni, id, pais, empleado
    from amx_base_empleados 
   where procesado = 0
   order by id 

 OPEN C_cursor
 FETCH NEXT FROM C_cursor INTO @dni, @id, @pais, @empleado
 WHILE (@@FETCH_STATUS <> -1 )
 BEGIN 
  set @dni = LTRIM(rtrim(@dni))
  if (len(@dni) > 8 or @pais != 'AR') --> lo agregamos para que lo haga antes, aca en realidad siempre va a hacer el else 
  begin
   update amx_base_empleados set cuit = @dni, procesado = 1 where id = @id
  end 
  else 
  begin
   set @dni1 = @dni 
   set @dni2 = (select right(('0000000'+@dni),8))   
   DECLARE C_cursor2 CURSOR FOR
    select identificacion from padrones 
                            where cuerpo_clave = @dni1 
       and habilitado = 1 and isnull(tipo_persona,'') != 'J'
    union 
    select identificacion from padrones 
                            where cuerpo_clave = @dni2 
       and habilitado = 1 and isnull(tipo_persona,'') != 'J'
   OPEN C_cursor2
   set @cant = 0
   FETCH NEXT FROM C_cursor2 INTO @cuit
   WHILE (@@FETCH_STATUS <> -1 )
   BEGIN 
    set @cant = @cant + 1 
    if (@cant = 1)
     update amx_base_empleados set cuit = @cuit, procesado = 1 where id = @id 
    else 
     insert into amx_base_empleados (dni, cuit, empleado, procesado,pais) values (@dni, @cuit, @empleado, 1, @pais) 
    
    FETCH NEXT FROM C_cursor2 INTO @cuit
   END 
   CLOSE C_cursor2
   DEALLOCATE C_cursor2
   -- si no encontro cuit, lo tienen que marcar como procesado
   if @cant = 0
   begin
    update amx_base_empleados set procesado = 1 where id = @id  
   end
  end 

  FETCH NEXT FROM C_cursor INTO @dni, @id, @pais, @empleado
 END
 CLOSE C_cursor
 DEALLOCATE C_cursor
 end 


 if (@paso = 2) 
 begin 
  -- carga con los cuits completados 
  insert into LN_control_screening (cliente, country_code, identificacion, visible, vigencia_desde, empleado, relacion) 
  select distinct '5546348', pais, cuit, 1, convert(date,getdate()), 
                  iif(isnull(empleado,'') = '',null,empleado), 
      iif(isnull(empleado,'') != '',iif(isnull(relacion,'') != '', relacion, 'FAMILIAR'),NULL) as relacion
  from amx_base_empleados where cuit is not null -- para paises que no es argentina, se los completo a todos, 
                -- para argentina los busca en base al dni

  -- carga los datos tal cual los mandaron 
  insert into LN_control_screening (cliente, country_code, identificacion, visible, vigencia_desde, empleado, relacion)
  select distinct '5546348', pais, ltrim(rtrim(dni)), 1, convert(date,getdate()), 
               iif(empleado='',null,empleado), 
      iif(isnull(empleado,'') != '',iif(isnull(relacion,'') != '', relacion, 'FAMILIAR'),NULL) as relacion
  from amx_base_empleados 
  where isnull(cuit,'') != dni -- si cuit es igual al dni ya se cargaron en el insert anterior

 end 

 select 'fin paso '+ convert(varchar,@paso)
END 

GO

Used By

No items found