dbo.sp_depurar_domicilios

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

1
Name Data Type Length Description
@p_cuit varchar 50

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
/*

exec sp_depurar_domicilios '20335754655'
exec sp_obtener_domicilios '23183026429'

select * from domicilios_todos where cuit = '20335754655'
exec sp_depurar_domicilios '20335754655'
exec sp_obtener_domicilios '20335754655'


*/

-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.sp_depurar_domicilios 
 -- Add the parameters for the stored procedure here
 @p_cuit          varchar(50)
 
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

    -- Insert statements for procedure here

 if (@p_cuit is not null) begin

  declare @domicilios table 
    (id int identity, 
    domicilio varchar(500),
    pai_nombre varchar(100),
    prv_nombre varchar(100),
    loc_nombre varchar(100),
    codpos  varchar(100),
    tipo_domicilio varchar(100), 
    created datetime)

  declare @domicilios_ok table 
    (id int identity, 
    domicilio varchar(500),
    pai_nombre varchar(100),
    prv_nombre varchar(100),
    loc_nombre varchar(100),
    codpos  varchar(100),
    tipo_domicilio varchar(100),
    created datetime)



  declare @id int, 
    @domicilio varchar(500),
    @pai_nombre varchar(100),
    @prv_nombre varchar(100),
    @loc_nombre varchar(100),
    @codpos  varchar(100),
    @tipo_domicilio varchar(100),
    @created datetime

  declare @id2 int, 
    @domicilio2  varchar(500),
    @pai_nombre2 varchar(100),
    @prv_nombre2 varchar(100),
    @loc_nombre2 varchar(100),
    @codpos2  varchar(100),
    @tipo_domicilio2 varchar(100),
    @created2 datetime
   
  declare @resp int

  insert into @domicilios (domicilio,
     pai_nombre,
     prv_nombre,
     loc_nombre,
     codpos,
     tipo_domicilio, 
     created)

  select top 150 replace(domicilio,'?','') as domicilio,
      pai_nombre,
      prv_nombre,
      loc_nombre,
      replace(codpos,'.','') as codpos,
      tipo_domicilio,
      max(isnull(created,'1901-01-01')) as created
  from domicilios_todos 
  where cuit = @p_cuit and visible = 1 
  group by domicilio, pai_nombre, 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_nombre,
       @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_nombre,
       @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_nombre2,
       @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) begin
      set @domicilio = @domicilio2       
     end
     
     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 (@tipo_domicilio is null) set @tipo_domicilio = ''

     if (select CHARINDEX(@tipo_domicilio2,@tipo_domicilio)) = 0
     begin
      if (@tipo_domicilio2 = 'O' AND @tipo_domicilio = '')
       set @tipo_domicilio = @tipo_domicilio + @tipo_domicilio2
      else
       /* Sólo se agrega un tipo de domicilio a la misma ubicación si 
        el tipo a agregar NO es 'otro domicilio'*/

       if (@tipo_domicilio2 != 'O')
        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') 
     set @loc_nombre = null

    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_nombre = @prv_nombre, 
       pai_nombre = @pai_nombre, 
       codpos     = @codpos,
       tipo_domicilio = @tipo_domicilio,
       created    = @created
       where id = @id 
     
    Fetch next from wc2 INTO  
      @id2,
      @domicilio2,
      @pai_nombre2,
      @prv_nombre2,
      @loc_nombre2,
      @codpos2,
      @tipo_domicilio2,
      @created2

   end 
   CLOSE wc2
   DEALLOCATE wc2

   Fetch next from wc INTO  
       @id, 
       @domicilio,
       @pai_nombre,
       @prv_nombre,
       @loc_nombre,
       @codpos,
       @tipo_domicilio, 
       @created
  END 
  CLOSE wc
  DEALLOCATE wc


  /***/
  
  UPDATE domicilios_todos SET visible = 0 WHERE cuit = @p_cuit AND visible = 1
  
  DECLARE @codigo_provincia varchar(2)

  DECLARE NUEVOS CURSOR FOR
  select id, 
   domicilio,
   pai_nombre,
   prv_nombre,
   loc_nombre,
   codpos,
   tipo_domicilio, created 
  from @domicilios 
  order by created desc

  OPEN NUEVOS
  FETCH NEXT FROM NUEVOS INTO @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
  WHILE @@FETCH_STATUS = 0 BEGIN

   if (@prv_nombre is not null)
    select @codigo_provincia = convert(varchar(2), codigo_afip)
    from provincias
    where country_code = 'AR'
    and prv_nombre = @prv_nombre

   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)

    insert into domicilios_todos 
     (cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
     created, visible, tipo_domicilio, procesado, isLast)
    values
     (@p_cuit, @domicilio, 54, 'ARGENTINA', @codigo_provincia, @prv_nombre, @loc_nombre, @codpos,
     GETDATE(), 1, @tipodom, 1, 0)

    SET @i = @i + 1
   END
   FETCH NEXT FROM NUEVOS INTO @id, @domicilio, @pai_nombre, @prv_nombre, @loc_nombre, @codpos, @tipo_domicilio, @created
  END
  CLOSE NUEVOS
  DEALLOCATE NUEVOS
  /* Fin inserción nuevos registros unificados */


 end
 
END
GO