Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
2| Name | Data Type | Length | Description |
|---|---|---|---|
| @cuit | varchar | 20 | |
| @visible | bit | 1 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
Limpia domicilios, borra los anteriores, y graba los arreglados.
Para visible = 1, o visible = 0
exec [sp_obtener_domicilios] '27208925658'
exec [backend_obtener_domicilios] '27208925658', 0
exec [backend_obtener_domicilios] '30641368977', 1
select * from domicilios_todos where cuit = '27208925658'
*/
CREATE OR ALTER PROCEDURE dbo.backend_obtener_domicilios
@cuit varchar(20), @visible bit = 1
AS
BEGIN
declare @domicilios table
(id int identity,
domicilio varchar(500),
pai_codigo int,
pai_nombre varchar(100),
prv_codigo char(2) ,
prv_nombre varchar(100),
loc_nombre varchar(100),
codpos varchar(100),
tipo_domicilio varchar(100),
created datetime)
declare @MaxDomicilios int = 150000
declare @domicilios_ok table
(id int identity,
domicilio varchar(500),
pai_codigo int,
pai_nombre varchar(100),
prv_codigo char(2) ,
prv_nombre varchar(100),
loc_nombre varchar(100),
codpos varchar(100),
tipo_domicilio varchar(100),
created datetime)
declare @id int,
@domicilio varchar(500),
@pai_codigo int,
@pai_nombre varchar(100),
@prv_codigo varchar(2),
@prv_nombre varchar(100),
@loc_nombre varchar(100),
@codpos varchar(100),
@tipo_domicilio varchar(100),
@created datetime
declare @id2 int,
@domicilio2 varchar(500),
@pai_codigo2 int,
@pai_nombre2 varchar(100),
@prv_codigo2 varchar(2),
@prv_nombre2 varchar(100),
@loc_nombre2 varchar(100),
@codpos2 varchar(100),
@tipo_domicilio2 varchar(100),
@created2 datetime
declare @resp int, @total int = 0
select @total = count(distinct domicilio)
from domicilios_todos
where cuit = @cuit
and visible = @visible
if (@total > @MaxDomicilios)
begin
select
/*
max(id_domicilio) as id,
replace(domicilio,'?','') as domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
max(replace(codpos,'.','')) as codpos,
replace(tipo_domicilio,'I','O') as tipo_domicilio,
max(isnull(created,'1901-01-01')) as created
*/
codpos, cuit, replace(domicilio,'?','') as domicilio, email, fax, id_domicilio, loc_codigo, loc_nombre,
pai_codigo, pai_nombre,
prv_codigo, prv_nombre, telefono, replace(tipo_domicilio,'I','O') as tipo_domicilio, created, modified, visible
from domicilios_todos
where cuit = @cuit
and visible = @visible
order by created desc
end
else
begin
insert into @domicilios (domicilio,
pai_codigo,
pai_nombre,
prv_codigo,
prv_nombre,
loc_nombre,
codpos,
tipo_domicilio,
created)
select top (@MaxDomicilios) replace(domicilio,'?','') as domicilio,
pai_codigo,
pai_nombre,
prv_codigo,
prv_nombre,
loc_nombre,
replace(codpos,'.','') as codpos,
replace(tipo_domicilio,'I','O') as tipo_domicilio,
max(isnull(created,'1901-01-01')) as created
from domicilios_todos
where cuit = @cuit
and visible = @visible
group by domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos, tipo_domicilio
order by tipo_domicilio, len(domicilio) desc, len(prv_nombre) desc, len(loc_nombre)
declare wc cursor for
select * from @domicilios
order by id
open wc
Fetch next from wc INTO
@id,
@domicilio,
@pai_codigo,
@pai_nombre,
@prv_codigo,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
if ((select count(*) from @domicilios where id = @id) = 0)
begin
Fetch next from wc INTO
@id,
@domicilio,
@pai_codigo,
@pai_nombre,
@prv_codigo,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
continue
end
declare wc2 cursor for
select * from @domicilios
where id > @id
order by id
open wc2
Fetch next from wc2 INTO
@id2,
@domicilio2,
@pai_codigo2,
@pai_nombre2,
@prv_codigo2,
@prv_nombre2,
@loc_nombre2,
@codpos2,
@tipo_domicilio2,
@created2
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
exec @resp = [sp_comparo_domicilios] @domicilio, @domicilio2
if (@resp = 1) -- son iguales
begin
if (@prv_nombre like 'NO INFORM%') set @prv_nombre = null
if (@prv_nombre2 like 'NO INFORM%') set @prv_nombre2 = null
if (@loc_nombre like 'NO INFORM%') set @loc_nombre = null
if (@loc_nombre2 like 'NO INFORM%') set @loc_nombre2 = null
if (@created2 > @created)
set @created = @created2
if (len(@domicilio2) > len(@domicilio) or @domicilio is null)
set @domicilio = @domicilio2
if (len(@prv_nombre2) > len(@prv_nombre) or @prv_nombre is null)
set @prv_nombre = @prv_nombre2
if (len(@loc_nombre2) > len(@loc_nombre) or @loc_nombre is null)
set @loc_nombre = @loc_nombre2
if (len(@pai_nombre2) > len(@pai_nombre) or @pai_nombre is null)
set @pai_nombre = @pai_nombre2
if (@pai_nombre2 = 'ARGENTINA' and (select isnumeric(@codpos2)) = 1 and len(@codpos2) > 4)
set @codpos2 = null
if (@pai_nombre = 'ARGENTINA' and (select isnumeric(@codpos)) = 1 and len(@codpos) > 4)
set @codpos = null
if (len(@codpos2) > len(@codpos) or @codpos is null)
set @codpos = @codpos2
if (@pai_codigo2 is not null and @pai_codigo is null)
set @pai_codigo = @pai_codigo2
if (@prv_codigo2 is not null and @prv_codigo is null)
set @prv_codigo = @prv_codigo
if (@tipo_domicilio is null) set @tipo_domicilio = ''
if (select CHARINDEX(@tipo_domicilio2,@tipo_domicilio)) = 0
begin
set @tipo_domicilio = @tipo_domicilio + @tipo_domicilio2
end
delete from @domicilios
where id = @id2
end
if (@prv_nombre = 'CIUDAD DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES' or
@prv_nombre = 'C.A.B.A.' or
@prv_nombre = 'CABA')
begin
set @loc_nombre = null
set @prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES'
end
if (@pai_nombre = 'ARGENTINA' and (select isnumeric(@codpos)) = 1 and len(@codpos) > 4)
set @codpos = null
if (rtrim(ltrim(@loc_nombre)) = '') set @loc_nombre = null
if (rtrim(ltrim(@prv_nombre)) = '') set @prv_nombre = null
if (rtrim(ltrim(@pai_nombre)) = '') set @pai_nombre = null
update @domicilios
set domicilio = @domicilio,
loc_nombre = @loc_nombre,
prv_codigo = @prv_codigo,
prv_nombre = @prv_nombre,
pai_codigo = @pai_codigo,
pai_nombre = @pai_nombre,
codpos = @codpos,
tipo_domicilio = @tipo_domicilio,
created = @created
where id = @id
Fetch next from wc2 INTO
@id2,
@domicilio2,
@pai_codigo2,
@pai_nombre2,
@prv_codigo2,
@prv_nombre2,
@loc_nombre2,
@codpos2,
@tipo_domicilio2,
@created2
end
CLOSE wc2
DEALLOCATE wc2
Fetch next from wc INTO
@id,
@domicilio,
@pai_codigo,
@pai_nombre,
@prv_codigo,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
END
CLOSE wc
DEALLOCATE wc
/* BORRAMOS LOS DOMICILIOS DEL CUIT PARA INSERTAR LOS DEPURADOS */
delete domicilios_todos where cuit = @cuit and visible = @visible
DECLARE depurados CURSOR FOR
select * from @domicilios order by created desc
OPEN depurados
FETCH NEXT FROM depurados INTO @id, @domicilio, @pai_codigo, @pai_nombre, @prv_codigo, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
WHILE @@FETCH_STATUS = 0
BEGIN
if (@prv_nombre = 'CIUDAD DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES' or
@prv_nombre = 'C.A.B.A.' or
@prv_nombre = 'CABA')
begin
set @loc_nombre = null
set @prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES'
end
DECLARE @n int = LEN(@tipo_domicilio)
DECLARE @i int = 1
DECLARE @tipodom VARCHAR(1)
WHILE (@i <= @n) BEGIN
SET @tipodom = SUBSTRING(@tipo_domicilio, @i, 1)
/*
select @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created,@tipodom
*/
insert into domicilios_todos
(cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
created, visible, tipo_domicilio, procesado, isLast)
values
(@cuit, @domicilio, @pai_codigo, @pai_nombre, ltrim(rtrim(@prv_codigo)), @prv_nombre, @loc_nombre, @codpos,GETDATE(), @visible, @tipodom, 1, 0)
SET @i = @i + 1
END
FETCH NEXT FROM depurados INTO @id, @domicilio, @pai_codigo, @pai_nombre, @prv_codigo, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
END
CLOSE depurados
DEALLOCATE depurados
declare @ids table (id int identity, domicilio varchar(200))
insert into @ids (domicilio)
select distinct domicilio from domicilios_todos
where cuit = @cuit and visible = @visible
select ids.id as id, codpos, cuit, domicilios_todos.domicilio, email, fax, id_domicilio, loc_codigo, loc_nombre, pai_codigo, pai_nombre,
ltrim(rtrim(prv_codigo)) as prv_codigo, prv_nombre, telefono, tipo_domicilio, created, modified, visible
from domicilios_todos
inner join @ids ids on ids.domicilio = domicilios_todos.domicilio
where cuit = @cuit and visible = @visible
order by domicilios_todos.domicilio, tipo_domicilio
end
END
GO
GO
/*
Limpia domicilios, borra los anteriores, y graba los arreglados.
Para visible = 1, o visible = 0
exec [sp_obtener_domicilios] '27208925658'
exec [backend_obtener_domicilios] '27208925658', 0
exec [backend_obtener_domicilios] '30641368977', 1
select * from domicilios_todos where cuit = '27208925658'
*/
CREATE OR ALTER PROCEDURE dbo.backend_obtener_domicilios
@cuit varchar(20), @visible bit = 1
AS
BEGIN
declare @domicilios table
(id int identity,
domicilio varchar(500),
pai_codigo int,
pai_nombre varchar(100),
prv_codigo char(2) ,
prv_nombre varchar(100),
loc_nombre varchar(100),
codpos varchar(100),
tipo_domicilio varchar(100),
created datetime)
declare @MaxDomicilios int = 150000
declare @domicilios_ok table
(id int identity,
domicilio varchar(500),
pai_codigo int,
pai_nombre varchar(100),
prv_codigo char(2) ,
prv_nombre varchar(100),
loc_nombre varchar(100),
codpos varchar(100),
tipo_domicilio varchar(100),
created datetime)
declare @id int,
@domicilio varchar(500),
@pai_codigo int,
@pai_nombre varchar(100),
@prv_codigo varchar(2),
@prv_nombre varchar(100),
@loc_nombre varchar(100),
@codpos varchar(100),
@tipo_domicilio varchar(100),
@created datetime
declare @id2 int,
@domicilio2 varchar(500),
@pai_codigo2 int,
@pai_nombre2 varchar(100),
@prv_codigo2 varchar(2),
@prv_nombre2 varchar(100),
@loc_nombre2 varchar(100),
@codpos2 varchar(100),
@tipo_domicilio2 varchar(100),
@created2 datetime
declare @resp int, @total int = 0
select @total = count(distinct domicilio)
from domicilios_todos
where cuit = @cuit
and visible = @visible
if (@total > @MaxDomicilios)
begin
select
/*
max(id_domicilio) as id,
replace(domicilio,'?','') as domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
max(replace(codpos,'.','')) as codpos,
replace(tipo_domicilio,'I','O') as tipo_domicilio,
max(isnull(created,'1901-01-01')) as created
*/
codpos, cuit, replace(domicilio,'?','') as domicilio, email, fax, id_domicilio, loc_codigo, loc_nombre,
pai_codigo, pai_nombre,
prv_codigo, prv_nombre, telefono, replace(tipo_domicilio,'I','O') as tipo_domicilio, created, modified, visible
from domicilios_todos
where cuit = @cuit
and visible = @visible
order by created desc
end
else
begin
insert into @domicilios (domicilio,
pai_codigo,
pai_nombre,
prv_codigo,
prv_nombre,
loc_nombre,
codpos,
tipo_domicilio,
created)
select top (@MaxDomicilios) replace(domicilio,'?','') as domicilio,
pai_codigo,
pai_nombre,
prv_codigo,
prv_nombre,
loc_nombre,
replace(codpos,'.','') as codpos,
replace(tipo_domicilio,'I','O') as tipo_domicilio,
max(isnull(created,'1901-01-01')) as created
from domicilios_todos
where cuit = @cuit
and visible = @visible
group by domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos, tipo_domicilio
order by tipo_domicilio, len(domicilio) desc, len(prv_nombre) desc, len(loc_nombre)
declare wc cursor for
select * from @domicilios
order by id
open wc
Fetch next from wc INTO
@id,
@domicilio,
@pai_codigo,
@pai_nombre,
@prv_codigo,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
if ((select count(*) from @domicilios where id = @id) = 0)
begin
Fetch next from wc INTO
@id,
@domicilio,
@pai_codigo,
@pai_nombre,
@prv_codigo,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
continue
end
declare wc2 cursor for
select * from @domicilios
where id > @id
order by id
open wc2
Fetch next from wc2 INTO
@id2,
@domicilio2,
@pai_codigo2,
@pai_nombre2,
@prv_codigo2,
@prv_nombre2,
@loc_nombre2,
@codpos2,
@tipo_domicilio2,
@created2
WHILE (@@FETCH_STATUS <> -1 )
BEGIN
exec @resp = [sp_comparo_domicilios] @domicilio, @domicilio2
if (@resp = 1) -- son iguales
begin
if (@prv_nombre like 'NO INFORM%') set @prv_nombre = null
if (@prv_nombre2 like 'NO INFORM%') set @prv_nombre2 = null
if (@loc_nombre like 'NO INFORM%') set @loc_nombre = null
if (@loc_nombre2 like 'NO INFORM%') set @loc_nombre2 = null
if (@created2 > @created)
set @created = @created2
if (len(@domicilio2) > len(@domicilio) or @domicilio is null)
set @domicilio = @domicilio2
if (len(@prv_nombre2) > len(@prv_nombre) or @prv_nombre is null)
set @prv_nombre = @prv_nombre2
if (len(@loc_nombre2) > len(@loc_nombre) or @loc_nombre is null)
set @loc_nombre = @loc_nombre2
if (len(@pai_nombre2) > len(@pai_nombre) or @pai_nombre is null)
set @pai_nombre = @pai_nombre2
if (@pai_nombre2 = 'ARGENTINA' and (select isnumeric(@codpos2)) = 1 and len(@codpos2) > 4)
set @codpos2 = null
if (@pai_nombre = 'ARGENTINA' and (select isnumeric(@codpos)) = 1 and len(@codpos) > 4)
set @codpos = null
if (len(@codpos2) > len(@codpos) or @codpos is null)
set @codpos = @codpos2
if (@pai_codigo2 is not null and @pai_codigo is null)
set @pai_codigo = @pai_codigo2
if (@prv_codigo2 is not null and @prv_codigo is null)
set @prv_codigo = @prv_codigo
if (@tipo_domicilio is null) set @tipo_domicilio = ''
if (select CHARINDEX(@tipo_domicilio2,@tipo_domicilio)) = 0
begin
set @tipo_domicilio = @tipo_domicilio + @tipo_domicilio2
end
delete from @domicilios
where id = @id2
end
if (@prv_nombre = 'CIUDAD DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES' or
@prv_nombre = 'C.A.B.A.' or
@prv_nombre = 'CABA')
begin
set @loc_nombre = null
set @prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES'
end
if (@pai_nombre = 'ARGENTINA' and (select isnumeric(@codpos)) = 1 and len(@codpos) > 4)
set @codpos = null
if (rtrim(ltrim(@loc_nombre)) = '') set @loc_nombre = null
if (rtrim(ltrim(@prv_nombre)) = '') set @prv_nombre = null
if (rtrim(ltrim(@pai_nombre)) = '') set @pai_nombre = null
update @domicilios
set domicilio = @domicilio,
loc_nombre = @loc_nombre,
prv_codigo = @prv_codigo,
prv_nombre = @prv_nombre,
pai_codigo = @pai_codigo,
pai_nombre = @pai_nombre,
codpos = @codpos,
tipo_domicilio = @tipo_domicilio,
created = @created
where id = @id
Fetch next from wc2 INTO
@id2,
@domicilio2,
@pai_codigo2,
@pai_nombre2,
@prv_codigo2,
@prv_nombre2,
@loc_nombre2,
@codpos2,
@tipo_domicilio2,
@created2
end
CLOSE wc2
DEALLOCATE wc2
Fetch next from wc INTO
@id,
@domicilio,
@pai_codigo,
@pai_nombre,
@prv_codigo,
@prv_nombre,
@loc_nombre,
@codpos,
@tipo_domicilio,
@created
END
CLOSE wc
DEALLOCATE wc
/* BORRAMOS LOS DOMICILIOS DEL CUIT PARA INSERTAR LOS DEPURADOS */
delete domicilios_todos where cuit = @cuit and visible = @visible
DECLARE depurados CURSOR FOR
select * from @domicilios order by created desc
OPEN depurados
FETCH NEXT FROM depurados INTO @id, @domicilio, @pai_codigo, @pai_nombre, @prv_codigo, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
WHILE @@FETCH_STATUS = 0
BEGIN
if (@prv_nombre = 'CIUDAD DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA DE BUENOS AIRES' or
@prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES' or
@prv_nombre = 'C.A.B.A.' or
@prv_nombre = 'CABA')
begin
set @loc_nombre = null
set @prv_nombre = 'CIUDAD AUTONOMA BUENOS AIRES'
end
DECLARE @n int = LEN(@tipo_domicilio)
DECLARE @i int = 1
DECLARE @tipodom VARCHAR(1)
WHILE (@i <= @n) BEGIN
SET @tipodom = SUBSTRING(@tipo_domicilio, @i, 1)
/*
select @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created,@tipodom
*/
insert into domicilios_todos
(cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
created, visible, tipo_domicilio, procesado, isLast)
values
(@cuit, @domicilio, @pai_codigo, @pai_nombre, ltrim(rtrim(@prv_codigo)), @prv_nombre, @loc_nombre, @codpos,GETDATE(), @visible, @tipodom, 1, 0)
SET @i = @i + 1
END
FETCH NEXT FROM depurados INTO @id, @domicilio, @pai_codigo, @pai_nombre, @prv_codigo, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
END
CLOSE depurados
DEALLOCATE depurados
declare @ids table (id int identity, domicilio varchar(200))
insert into @ids (domicilio)
select distinct domicilio from domicilios_todos
where cuit = @cuit and visible = @visible
select ids.id as id, codpos, cuit, domicilios_todos.domicilio, email, fax, id_domicilio, loc_codigo, loc_nombre, pai_codigo, pai_nombre,
ltrim(rtrim(prv_codigo)) as prv_codigo, prv_nombre, telefono, tipo_domicilio, created, modified, visible
from domicilios_todos
inner join @ids ids on ids.domicilio = domicilios_todos.domicilio
where cuit = @cuit and visible = @visible
order by domicilios_todos.domicilio, tipo_domicilio
end
END
GO
Depends On
2Used By
No items found