dbo.sp_domicilios_buscar_vecinos

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

3
Name Data Type Length Description
@cuit varchar 20
@cliente int 4
@fecha_proceso date 3

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
[sp_domicilios_buscar_vecinos]
null, 861672084, 
'2020-04-22'
*/

/* Dado un CUIT busca su domicilio principal y todos los vecinos que viven en el mismo domicilio */

CREATE OR ALTER PROCEDURE dbo.sp_domicilios_buscar_vecinos 
@cuit varchar(20), -- Se puede hacer para un cuit
@cliente int = null,        -- Para todos los cuits de un proceso, estos dos parametros
@fecha_proceso date = null 
AS
BEGIN
    SET NOCOUNT ON;
 declare @domicilios table (id int, domicilio varchar(200), pai_nombre varchar(50), prv_nombre varchar(100), loc_nombre varchar(100), codpos varchar(10), tipo_domicilio varchar(10), created datetime)

 declare @domicilio varchar(200), 
         @localidad varchar(100), 
   @provincia varchar(100), 
   @codpos    varchar(10) , 
   @tipo_domicilio varchar(10)
 
 declare @busqueda_domicilio varchar(800),
   @busqueda_provincia varchar(2), 
   @busqueda_tipo_domicilio varchar(100)

 
 declare @vecinos table (id int identity, 
       cuit varchar(20),
       nombre varchar(200),
       domicilio varchar(200), 
       prv_nombre varchar(100), 
       loc_nombre varchar(100), 
       codpos varchar(10), 
       tipo_domicilio varchar(10))
   

 if (@cuit = '') set @cuit = null

    if (@cliente is not null and 
  @fecha_proceso is not null)
 begin  
  if (@cuit is null)
  begin
   delete procesos_cuit_enrichment_empresas_domicilio 
    where cliente = @cliente 
      and fecha_proceso = @fecha_proceso
   
    DECLARE bn2 CURSOR FOR
     SELECT distinct cuit
       FROM procesos_cuit a
      where a.cliente = @cliente
                 and a.fecha = @fecha_proceso
        --and a.cuit like '2%'
        order by cuit

    end 
  else 
  begin 
   delete procesos_cuit_enrichment_empresas_domicilio 
    where cliente = @cliente 
      and fecha_proceso = @fecha_proceso
      and cuit = @cuit
   
    DECLARE bn2 CURSOR FOR
     SELECT distinct cuit
       FROM procesos_cuit
      where cliente = @cliente
                 and fecha = @fecha_proceso
              and cuit = @cuit

  end

 end
 else 
 begin  
   DECLARE bn2 CURSOR FOR
    SELECT @cuit 
 end 

 OPEN bn2 
 Fetch next from bn2 INTO  @cuit
 WHILE (@@FETCH_STATUS <> -1 )
 BEGIN 
   insert into @domicilios
      exec sp_obtener_domicilios @cuit, 1

   if ((select count(*) from @domicilios where isnull(domicilio,'') != '') = 0)
   begin 
    -- Si no encontro domicilios de AFIP busca otros
    insert into @domicilios
    exec sp_obtener_domicilios @cuit, 0
   end 

   -- Toma uno, si tenemos el fiscal (F), sino el legal (L), sino el real (D), sino el electoral (E), sino otro... 
   SELECT top 1
            @domicilio = 
      isnull(d.domicilio,''),
      @localidad =
      isnull(d.loc_nombre,''), 
      @provincia = 
      isnull(d.prv_nombre,''),
      @codpos = 
      isnull(d.codpos,''), 
      @tipo_domicilio = isnull(d.tipo_domicilio,'')
    from @domicilios d 
    where 
     d.domicilio not like 'RESIDE EN' 
    --and d.domicilio not like '%ZONA RURAL%'
    --and d.domicilio not like '%SIN NOMBRE%'
    and d.domicilio not like 'DOMICILIADA EN'
    order by (case 
          when (d.tipo_domicilio LIKE '%F%' and isnull(d.codpos,'') != '') then '1' 
          when (d.tipo_domicilio LIKE '%F%' and isnull(d.codpos,'') = '')  then '2' 
          when (d.tipo_domicilio LIKE '%L%' and isnull(d.codpos,'') != '') then '3' 
       when (d.tipo_domicilio LIKE '%L%' and isnull(d.codpos,'') = '')  then '4' 
       when (d.tipo_domicilio LIKE '%D%' and isnull(d.codpos,'') != '') then '5'
       WHEN (d.tipo_domicilio LIKE '%O%' and isnull(d.codpos,'') != '') then '6'
       WHEN (d.tipo_domicilio LIKE '%E%' and isnull(d.codpos,'') != '') then '7'
       when (d.tipo_domicilio LIKE '%D%' and isnull(d.codpos,'') = '')  then '8'
       WHEN (d.tipo_domicilio LIKE '%O%' and isnull(d.codpos,'') = '')  then '9'
       WHEN (d.tipo_domicilio LIKE '%E%' and isnull(d.codpos,'') = '')  then '10'
       else '11'
          end)
   delete from @domicilios

   declare @prv_codigo char(2) = null
   select @prv_codigo = codigo_afip from provincias where country_code = 'AR' and prv_nombre = @provincia
   if (@prv_codigo is null) 
    if (@provincia like 'CIUDAD%BUENOS%AIRES' or
     @provincia like 'CIUDAD%BS%AS' or 
     @provincia = 'CABA' or
     @provincia = 'C.A.B.A.') set @prv_codigo = '0'


   exec [sp_domicilios_calle_altura] @domicilio, @prv_codigo, 'L,F,D',
     @busqueda_domicilio output,
     @busqueda_provincia output,
     @busqueda_tipo_domicilio output
   set @busqueda_domicilio = ltrim(rtrim(@busqueda_domicilio))
   --select @busqueda_domicilio, @prv_codigo
   if (isnull(@busqueda_domicilio,'') != '')
   begin
   insert into @vecinos   (cuit,
         nombre,
         domicilio, 
         prv_nombre, 
         loc_nombre, 
         codpos, 
         tipo_domicilio)
   select domicilios_todos.cuit, padrones.nombre_persona, 
          domicilio, prv_nombre, loc_nombre, codpos, tipo_domicilio
     from domicilios_todos 
    INNER JOIN dbo.DelimitedSplit8K(@busqueda_tipo_domicilio, ',') lista ON lista.item = domicilios_todos.tipo_domicilio
    INNER JOIN Padrones on (padrones.identificacion = domicilios_todos.cuit and habilitado = 1)
    where cuit != @cuit
      and prv_codigo = @busqueda_provincia 
      and isnull(domicilio,'') != '' 
      and contains(domicilio,@busqueda_domicilio)
      and (isnull(codpos,'') = @codpos)
      and visible = 1
         order by (case 
          when (tipo_domicilio LIKE '%F%' and isnull(codpos,'') != '') then '1' 
          when (tipo_domicilio LIKE '%F%' and isnull(codpos,'') = '')  then '2' 
          when (tipo_domicilio LIKE '%L%' and isnull(codpos,'') != '') then '3' 
       when (tipo_domicilio LIKE '%L%' and isnull(codpos,'') = '')  then '4' 
       when (tipo_domicilio LIKE '%D%' and isnull(codpos,'') != '') then '5'
       WHEN (tipo_domicilio LIKE '%O%' and isnull(codpos,'') != '') then '6'
       WHEN (tipo_domicilio LIKE '%E%' and isnull(codpos,'') != '') then '7'
       when (tipo_domicilio LIKE '%D%' and isnull(codpos,'') = '')  then '8'
       WHEN (tipo_domicilio LIKE '%O%' and isnull(codpos,'') = '')  then '9'
       WHEN (tipo_domicilio LIKE '%E%' and isnull(codpos,'') = '')  then '10'
       else '11'
          end)
   end 
  declare @nombre varchar(200)
  select top 1 @nombre = nombre_persona from padrones where identificacion = @cuit and habilitado = 1
  if (@cliente is not null and 
   @fecha_proceso is not null)
     begin
   if (select count(*) from @vecinos) = 0
    insert into procesos_cuit_enrichment_empresas_domicilio 
    select @cliente, @fecha_proceso, @cuit as cuit_buscado, 
        @nombre as nombre_buscado, 
        @domicilio as domicilio,
        @provincia as provincia,
        @localidad as localidad,
        @codpos as codpos,
        @tipo_domicilio as tipo_domicilio, 
        null as cuit_vecino, 
        null as nombre_vecino,
        null as domicilio_vecino, 
        null as provincia_vecino, 
        null as localidad_vecino, 
        null as codpos_vecino, 
        null as tipo_domicilio_vecino
      
   else 
   insert into procesos_cuit_enrichment_empresas_domicilio 
   select @cliente, @fecha_proceso, @cuit as cuit_buscado, 
          @nombre as nombre_buscado, 
       @domicilio as domicilio,
       @provincia as provincia,
       @localidad as localidad,
       @codpos as codpos,
       @tipo_domicilio as tipo_domicilio, 
       cuit as cuit_vecino, 
       nombre as nombre_vecino,
       domicilio as domicilio_vecino, 
       prv_nombre as provincia_vecino, 
       loc_nombre as localidad_vecino, 
       codpos as codpos_vecino, 
       tipo_domicilio as tipo_domicilio_vecino
      from @vecinos a
     where a.id = (select min(id) from @vecinos b where b.cuit = a.cuit) 
  end
  else 
  begin 
   if (select count(*) from @vecinos) = 0
    select @cuit as cuit_buscado, 
        @nombre as nombre_buscado, 
        @domicilio as domicilio,
        @provincia as provincia,
        @localidad as localidad,
        @codpos as codpos,
        @tipo_domicilio as tipo_domicilio, 
        null as cuit_vecino, 
        null as nombre_vecino,
        null as domicilio_vecino, 
        null as provincia_vecino, 
        null as localidad_vecino, 
        null as codpos_vecino, 
        null as tipo_domicilio_vecino
      
   else 

    select @cuit as cuit_buscado, 
        @nombre as nombre_buscado, 
        @domicilio as domicilio,
        @provincia as provincia,
        @localidad as localidad,
        @codpos as codpos,
        @tipo_domicilio as tipo_domicilio, 
        cuit as cuit_vecino, 
        nombre as nombre_vecino,
        domicilio as domicilio_vecino, 
        prv_nombre as provincia_vecino, 
        loc_nombre as localidad_vecino, 
        codpos as codpos_vecino, 
        tipo_domicilio as tipo_domicilio_vecino
       from @vecinos a
      where a.id = (select min(id) from @vecinos b where b.cuit = a.cuit) 
  end
  delete from @vecinos 
  Fetch next from bn2 INTO  @cuit
 END 
 CLOSE bn2
 DEALLOCATE bn2

END 

GO