dbo.sp_comparo_domicilios_universo_

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

4
Name Data Type Length Description
@domicilio1 varchar 500
@provincia varchar 100
@cuit varchar 20
@proceso int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
exec  [sp_comparo_domicilios_universo_] 'BOGADO PJE. 4529 PISO:5 DPTO:A', 'CIUDAD AUTONOMA DE BUENOS AIRES','20162461827',1
exec  [sp_comparo_domicilios_universo_] '504 N 1769', 'BUENOS AIRES','20162461827',0

select p.nombre_persona, p.identificacion, d.* from domicilios_todos d 
inner join padrones p on p.identificacion = d.cuit and p.habilitado = 1 and p.identificador in ('CUIT','CUIL') 
where prv_nombre like 'CIUDAD%BUENOS AIRES' AND domicilio like '%BOGADO %4529%' and visible = 1 and cuit like '3%'

*/

CREATE OR ALTER PROCEDURE dbo.sp_comparo_domicilios_universo_ 
@domicilio1 varchar(500) = null, 
@provincia varchar(100) = null, 
@cuit varchar(20) = null,
@proceso int = 0 --> 1 va a devolver el registro completo de la empresa con ese domicilio
     --> 0 devuelve el cuit y paremetros de busqueda, para que el SP que lo llama, lo haga
AS
BEGIN
    SET NOCOUNT ON;

 declare @cant1 smallint = 0

 declare @palabras1 table (nro smallint, palabra varchar(100))
 declare @pal varchar(100)
 declare @i smallint, @j smallint
 
 set @domicilio1 = REPLACE(@domicilio1,'¥','')

--- Paso 1: separo las palabras de los domicilios
 while (@domicilio1 like '%  %')
 begin
  set @domicilio1 = replace(@domicilio1,'  ',' ')
 end 

 set @i = len(@domicilio1)

 -- domicilio 1
 set @i = len(@domicilio1)
 set @j = CHARINDEX(' ', @domicilio1)
 while (@j < @i and @j > 0)
 begin
  set @cant1 = @cant1 + 1
  set @pal = (SELECT SUBSTRING(@domicilio1, 1, CHARINDEX(' ', @domicilio1) - 1))
  insert into @palabras1 values (@cant1, @pal)
  SET @domicilio1 = (select SUBSTRING(@domicilio1, CHARINDEX(' ', @domicilio1) +1, LEN(@domicilio1)))
  set @i = len(@domicilio1)
  set @j = CHARINDEX(' ', @domicilio1)
 end 

 set @cant1 = @cant1 + 1
 set @pal = @domicilio1
 insert into @palabras1 values (@cant1, @pal)


 -- Busco la altura 

 declare @Numero_1 varchar(10) = null
 set @i = 2
 while (@i <= @cant1) 
 BEGIN
            IF (@i = 2 AND (select palabra from @palabras1 where nro = 1) =  'CALLE')
               BEGIN
    set @i = @i + 1
    CONTINUE
      END
            IF (@i = 3 AND (select palabra from @palabras1 where nro = 1) =  'CALLE' 
                       AND (select palabra from @palabras1 where nro = 2) in ('N', 'NRO', 'NRO.','N*','Nº'))
               BEGIN
    set @i = @i + 1
    CONTINUE
      END
   set @pal = (select palabra from @palabras1 where nro = @i)
            IF ((select isnumeric(@pal)) = 1)
      BEGIN
       set @pal = replace(@pal,',','')
          set @pal = replace(@pal,'-','')
          set @pal = replace(@pal,'.','')
       set @Numero_1 = convert(int,@pal)
       update @palabras1 set palabra = null where nro = @i 
       break
      END
   set @i = @i + 1
    END 
  
 /*
  select * from @palabras1
  select @Numero_1 as altura
  return
  */

 
/*  
PARA LOS CASOS DE CALLES QUE EL NOMBRE ES UN NRO.
*/

    declare @Calle varchar(100) = null

 IF ((select palabra from @palabras1 where nro = 1) =  'CALLE')
        BEGIN
   set @pal = (select palabra from @palabras1 where nro = 2)
   IF ((select isnumeric(@pal)) = 1)
    BEGIN
     set @calle = @pal
    END
    else 
    BEGIN
     if ((select palabra from @palabras1 where nro = 2) in ('N','NRO','NRO.','N*','Nº'))
     begin 
      set @pal = (select palabra from @palabras1 where nro = 3)
      IF ((select isnumeric(@pal)) = 1)
      BEGIN
       set @calle = @pal
      END
     end 
    END 
        END 
 set @pal = (select palabra from @palabras1 where nro = 1)
 IF ((select isnumeric(@pal)) = 1)
  BEGIN
   set @calle = @pal
  END
 ---
 declare @longitud smallint = 0
 declare @largas smallint = 0,
            @Cortas smallint = 0
 declare @pal1 varchar(100) = null,
   @buscar varchar(100) = null
 set @i = 1
 set @j = 1
 
 while (@i <= @cant1)
 begin
  set @pal1 = (select palabra from @palabras1 where nro = @i) 
  if (@pal1 != 'PISO' and @pal1 not like 'PISO:%' and @pal1 not like 'DPTO:%' and @pal1 not like 'DTO:%' 
      and @pal1 != 'CALLE' and @pal1 != 'AVENIDA' and @pal1 != 'AV' and @pal1 != 'AV.' and @pal1 != 'AVDA' and @pal1 != 'AVDA.'
   and @pal1 != 'PASAJE' and @pal1 != 'PJE' and @pal1 != 'PJE.')
  begin
   if (LEN(@pal1) > @longitud and len(@pal1) > 3) 
      set @buscar = @pal1
  end 
        set @i = @i + 1
    end
 /*
  set @buscar = '%' + @buscar + ' %' 
  if (@buscar is not null and @Numero_1 is not null)
  set @buscar = @buscar + cast(@Numero_1 as varchar) + '%'
  */

 /*
  if (@proceso = 1) 
  begin
  select @buscar, @Numero_1 return
  end
  */

 if (@provincia like 'CIUDAD%BUENOS AIRES')
  set @provincia = 'CIUDAD%BUENOS AIRES'
 
 --select @buscar, @provincia return
 
 declare @encontrados table (cuit varchar(20), nombre varchar(200)) 
 declare @domicilios table (id int, domicilio varchar(200), pai_nombre varchar(20), prv_nombre varchar(100), loc_nombre varchar(100), codpos varchar(10), tipo_domicilio varchar(10), created datetime)
 declare @resultados table (cuit varchar(20), nombre varchar(200), domicilio varchar(200), prv_nombre varchar(100), loc_nombre varchar(100), codpos varchar(10), tipo_domicilio varchar(10))

 declare @cuit_encontrado varchar(20), @nombre_encontrado varchar(200)

 insert into @encontrados
 select p.identificacion, p.nombre_persona--, d.* 
 from domicilios_todos d
 inner join padrones p on p.identificacion = d.cuit and p.habilitado = 1 and p.identificador in ('CUIT','CUIL')
 where prv_nombre like + '%' + @provincia + '%' 
 and domicilio like + '%' + @buscar + ' %' + iif(@Numero_1 is not null,cast(@Numero_1 as varchar),'') + '%'
 and visible = 1 and cuit like '3%'
 

 if @proceso = 1 
 begin
  DECLARE C_padron CURSOR FOR
   select distinct cuit,nombre 
   from @encontrados
  OPEN C_Padron
  FETCH NEXT FROM C_Padron INTO @cuit_encontrado, @nombre_encontrado
           
  WHILE @@fetch_status = 0
  BEGIN 
    delete from @domicilios
    insert into @domicilios exec sp_obtener_domicilios @cuit_encontrado
   
    insert into @resultados 
    select @cuit_encontrado, @nombre_encontrado, d.domicilio, d.prv_nombre, d.loc_nombre, d.codpos, d.tipo_domicilio
      from @domicilios d
     where prv_nombre like + '%' + @provincia + '%' 
       and domicilio like + '%' + @buscar + ' %' + iif(@Numero_1 is not null,cast(@Numero_1 as varchar),'') + '%'
   
    FETCH NEXT FROM C_Padron INTO @cuit_encontrado, @nombre_encontrado

  END
  CLOSE C_Padron
  DEALLOCATE C_Padron

  select * from @resultados
  
 end 
 else
 begin
  select distinct cuit, nombre, @buscar as buscar, @Numero_1 as altura from @encontrados
 end

END

GO