Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
/*
SELECT COUNT(*) FROM te_movistar_2
select top 100 * from te_movistar_2
exec TE_MOVISTAR_2_DOMICILIOS
*/
-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.TE_MOVISTAR_2_DOMICILIOS
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
declare @id int
declare @cuit varchar(20)
declare @domicilio varchar(100)
declare @cp varchar(4)
declare @loc varchar(50)
declare @prov varchar(25)
declare @codigo_provincia varchar(2) = null
DECLARE MOVISTAR CURSOR FOR
select top 100 id_movi,
cuit,
LTRIM(RTRIM(direccion)),
iif(LTRIM(RTRIM(cpostal)) != '', cpostal, null) as cpostal,
LTRIM(RTRIM(localidad)),
LTRIM(RTRIM(provincia))
from te_movistar_2
where _domicilios_proc = 0
OPEN MOVISTAR
FETCH NEXT FROM MOVISTAR INTO @id, @cuit, @domicilio, @cp, @loc, @prov
WHILE @@FETCH_STATUS = 0 BEGIN
/* depúración */
EXEC sp_depurar_domicilios @cuit
/* DEBUG
select @cuit as CUIT, @domicilio as DOMICILIO, @cp as CODIGOPOSTAL, @loc AS LOCALIDAD, @prov as PROVINCIA */
/*** procesar domicilios preexistentes depurados y matchear con el de la fuente ***/
declare @w_id int,
@w_domicilio varchar(500),
@w_pai_nombre varchar(100),
@w_prv_nombre varchar(100),
@w_loc_nombre varchar(100),
@w_codpos varchar(100),
@w_tipo_domicilio varchar(100),
@w_created datetime,
@lista_id varchar(max) = null,
@match tinyint = 0,
@hay_match tinyint = 0,
@tiene_tipo_d tinyint = 0
DECLARE DOMIC CURSOR FOR
select top 150 id_domicilio,
replace(domicilio,'?','') as domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
replace(codpos,'.','') as codpos,
tipo_domicilio,
created
from domicilios_todos
where cuit = @cuit
and visible = 1
OPEN DOMIC
FETCH NEXT FROM DOMIC INTO @w_id, @w_domicilio, @w_pai_nombre, @w_prv_nombre, @w_loc_nombre, @w_codpos, @w_tipo_domicilio, @w_created
WHILE @@FETCH_STATUS = 0 BEGIN
/*SELECT @cuit,@loc,@prov,@calle,@nro,@piso,@dpto,@w_id_domicilio as ID,@w_domicilio AS DOMICILIO, @w_loc_nombre AS LOCALIDAD, @w_prv_nombre AS PROVINCIA*/
/* comparo el compuesto de calle y nro de la fuente con el domicilio obtenido */
set @match = 0
exec @match = [sp_comparo_domicilios] @domicilio, @w_domicilio
/* DEBUG
SELECT @w_domicilio as ID, @match as MATCH */
if (@match = 1) begin
/* domicilio ya existente (coincidencia): marco el matcheo positivo */
if (@hay_match = 0) begin
set @hay_match = 1
end
end
/* Busco si existe domicilio D o E en todos los resultados */
if (@tiene_tipo_d = 0) begin
if (CHARINDEX('D', @w_tipo_domicilio, 1) > 0 OR CHARINDEX('E', @w_tipo_domicilio, 1) > 0) begin
set @tiene_tipo_d = 1
end
end
FETCH NEXT FROM DOMIC INTO @w_id, @w_domicilio, @w_pai_nombre, @w_prv_nombre, @w_loc_nombre, @w_codpos, @w_tipo_domicilio, @w_created
END
CLOSE DOMIC
DEALLOCATE DOMIC
/* Verificamos si hay que insertar nuevo domicilio */
if (@hay_match = 0) begin
if (@prov is not null)
select @codigo_provincia = convert(varchar(2), codigo_afip)
from provincias
where country_code = 'AR'
and prv_nombre = @prov
/* si es un nuevo domicilio, cuando tiene D o E lo inserto como otro, sino como D */
insert into domicilios_todos
(cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
created, visible, tipo_domicilio, nombre_fuente, procesado, isLast)
values
(@cuit, @domicilio, 54, 'ARGENTINA', @codigo_provincia, @prov, @loc, @cp,
GETDATE(), 1, iif(@tiene_tipo_d > 0, 'O', 'D'), 'te_movistar_2', 1, 0)
/* DEBUG */
select @cuit as CUIT, @domicilio as DOMICILIO, @cp as CODIGOPOSTAL, @loc AS LOCALIDAD, @prov as PROVINCIA
select @tiene_tipo_d as TIENE_TIPO_D, iif(@tiene_tipo_d > 0, 'O', 'D') AS TIPO_NUEVO
exec sp_obtener_domicilios @cuit
end else
/* En caso de existir un match, sólo lo agrego como D si no existe domicilio con ese tipo */
if (@tiene_tipo_d = 0) begin
if (@prov is not null)
select @codigo_provincia = convert(varchar(2), codigo_afip)
from provincias
where country_code = 'AR'
and prv_nombre = @prov
insert into domicilios_todos
(cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
created, visible, tipo_domicilio, nombre_fuente, procesado, isLast)
values
(@cuit, @domicilio, 54, 'ARGENTINA', @codigo_provincia, @prov, @loc, @cp,
GETDATE(), 1, 'D', 'te_movistar_2', 1, 0)
/*SELECT @tiene_tipo_d as HAY_MATCH_D*/
end
/*****/
/* DEBUG
exec sp_obtener_domicilios @cuit */
UPDATE te_movistar_2 SET _domicilios_proc = 1 WHERE id_movi = @id
FETCH NEXT FROM MOVISTAR INTO @id, @cuit, @domicilio, @cp, @loc, @prov
END
CLOSE MOVISTAR
DEALLOCATE MOVISTAR
END
GO
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
/*
SELECT COUNT(*) FROM te_movistar_2
select top 100 * from te_movistar_2
exec TE_MOVISTAR_2_DOMICILIOS
*/
-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.TE_MOVISTAR_2_DOMICILIOS
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
declare @id int
declare @cuit varchar(20)
declare @domicilio varchar(100)
declare @cp varchar(4)
declare @loc varchar(50)
declare @prov varchar(25)
declare @codigo_provincia varchar(2) = null
DECLARE MOVISTAR CURSOR FOR
select top 100 id_movi,
cuit,
LTRIM(RTRIM(direccion)),
iif(LTRIM(RTRIM(cpostal)) != '', cpostal, null) as cpostal,
LTRIM(RTRIM(localidad)),
LTRIM(RTRIM(provincia))
from te_movistar_2
where _domicilios_proc = 0
OPEN MOVISTAR
FETCH NEXT FROM MOVISTAR INTO @id, @cuit, @domicilio, @cp, @loc, @prov
WHILE @@FETCH_STATUS = 0 BEGIN
/* depúración */
EXEC sp_depurar_domicilios @cuit
/* DEBUG
select @cuit as CUIT, @domicilio as DOMICILIO, @cp as CODIGOPOSTAL, @loc AS LOCALIDAD, @prov as PROVINCIA */
/*** procesar domicilios preexistentes depurados y matchear con el de la fuente ***/
declare @w_id int,
@w_domicilio varchar(500),
@w_pai_nombre varchar(100),
@w_prv_nombre varchar(100),
@w_loc_nombre varchar(100),
@w_codpos varchar(100),
@w_tipo_domicilio varchar(100),
@w_created datetime,
@lista_id varchar(max) = null,
@match tinyint = 0,
@hay_match tinyint = 0,
@tiene_tipo_d tinyint = 0
DECLARE DOMIC CURSOR FOR
select top 150 id_domicilio,
replace(domicilio,'?','') as domicilio,
pai_nombre,
prv_nombre,
loc_nombre,
replace(codpos,'.','') as codpos,
tipo_domicilio,
created
from domicilios_todos
where cuit = @cuit
and visible = 1
OPEN DOMIC
FETCH NEXT FROM DOMIC INTO @w_id, @w_domicilio, @w_pai_nombre, @w_prv_nombre, @w_loc_nombre, @w_codpos, @w_tipo_domicilio, @w_created
WHILE @@FETCH_STATUS = 0 BEGIN
/*SELECT @cuit,@loc,@prov,@calle,@nro,@piso,@dpto,@w_id_domicilio as ID,@w_domicilio AS DOMICILIO, @w_loc_nombre AS LOCALIDAD, @w_prv_nombre AS PROVINCIA*/
/* comparo el compuesto de calle y nro de la fuente con el domicilio obtenido */
set @match = 0
exec @match = [sp_comparo_domicilios] @domicilio, @w_domicilio
/* DEBUG
SELECT @w_domicilio as ID, @match as MATCH */
if (@match = 1) begin
/* domicilio ya existente (coincidencia): marco el matcheo positivo */
if (@hay_match = 0) begin
set @hay_match = 1
end
end
/* Busco si existe domicilio D o E en todos los resultados */
if (@tiene_tipo_d = 0) begin
if (CHARINDEX('D', @w_tipo_domicilio, 1) > 0 OR CHARINDEX('E', @w_tipo_domicilio, 1) > 0) begin
set @tiene_tipo_d = 1
end
end
FETCH NEXT FROM DOMIC INTO @w_id, @w_domicilio, @w_pai_nombre, @w_prv_nombre, @w_loc_nombre, @w_codpos, @w_tipo_domicilio, @w_created
END
CLOSE DOMIC
DEALLOCATE DOMIC
/* Verificamos si hay que insertar nuevo domicilio */
if (@hay_match = 0) begin
if (@prov is not null)
select @codigo_provincia = convert(varchar(2), codigo_afip)
from provincias
where country_code = 'AR'
and prv_nombre = @prov
/* si es un nuevo domicilio, cuando tiene D o E lo inserto como otro, sino como D */
insert into domicilios_todos
(cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
created, visible, tipo_domicilio, nombre_fuente, procesado, isLast)
values
(@cuit, @domicilio, 54, 'ARGENTINA', @codigo_provincia, @prov, @loc, @cp,
GETDATE(), 1, iif(@tiene_tipo_d > 0, 'O', 'D'), 'te_movistar_2', 1, 0)
/* DEBUG */
select @cuit as CUIT, @domicilio as DOMICILIO, @cp as CODIGOPOSTAL, @loc AS LOCALIDAD, @prov as PROVINCIA
select @tiene_tipo_d as TIENE_TIPO_D, iif(@tiene_tipo_d > 0, 'O', 'D') AS TIPO_NUEVO
exec sp_obtener_domicilios @cuit
end else
/* En caso de existir un match, sólo lo agrego como D si no existe domicilio con ese tipo */
if (@tiene_tipo_d = 0) begin
if (@prov is not null)
select @codigo_provincia = convert(varchar(2), codigo_afip)
from provincias
where country_code = 'AR'
and prv_nombre = @prov
insert into domicilios_todos
(cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
created, visible, tipo_domicilio, nombre_fuente, procesado, isLast)
values
(@cuit, @domicilio, 54, 'ARGENTINA', @codigo_provincia, @prov, @loc, @cp,
GETDATE(), 1, 'D', 'te_movistar_2', 1, 0)
/*SELECT @tiene_tipo_d as HAY_MATCH_D*/
end
/*****/
/* DEBUG
exec sp_obtener_domicilios @cuit */
UPDATE te_movistar_2 SET _domicilios_proc = 1 WHERE id_movi = @id
FETCH NEXT FROM MOVISTAR INTO @id, @cuit, @domicilio, @cp, @loc, @prov
END
CLOSE MOVISTAR
DEALLOCATE MOVISTAR
END
GO
Depends On
6Used By
No items found