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
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
Depends On
3Used By
No items found