dbo.api_padrones_busqueda_avanzada_2025

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

11
Name Data Type Length Description
@p_tipo_persona char 1
@p_taxid varchar 100
@p_razon_social varchar 100
@p_apellido varchar 100
@p_nombre varchar 100
@p_genero char 1
@p_provincia char 2
@p_edad_min int 4
@p_edad_max int 4
@max_rows int 4
@p_todos_los_paises tinyint 1

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
-- =============================================
-- Author: MIS
-- Create date: 2025-01-03
-- Description: Búsqueda de Padrón avanzado: Tiene en cuenta tipo de persona, y provincia
/* Hay que armar un store de busqueda de padron, que reciba los siguientes parametros para realizar una busqueda con:
Tipo de persona (física o jurídica)
razon_social (aka: nombre_persona)
nombre
apellido
identificacion
provincia (para comparar con el domicilio)
*/

-- =============================================
/*
exec [api_padrones_busqueda_avanzada_2025] 'F', null,null,'SARALEGUI FERNANDEZ','MANUEL','M',null,30,40,30
exec [api_padrones_busqueda_avanzada_2025] 'F',null, 'INES MARIA SORIA',null,null,null,null,null,null,30
exec [api_padrones_busqueda_avanzada_2025] null,null, NULL,'di maria',null,null,null,18,100,30
exec [api_padrones_busqueda_avanzada_2025] NULL,null,'de souza'
exec [api_padrones_busqueda_avanzada_2025] null,'ARCOS DORADOS',null,null,null,null,null,null,null,300,1
exec [api_padrones_busqueda_avanzada_2025] null,'ARCOS DORADOS',null,null,null,null,null,null,null,300,2
exec [api_padrones_busqueda_avanzada_2025] null,'ARCOS DORADOS',null,null,null,null,null,null,null,300,0
exec [api_padrones_busqueda_avanzada_2025] null,'ARCOS DORADOS',null,null,null,null,1,null,null,300,0


exec [api_padrones_busqueda_avanzada_2025] null,'59144'

EXEC busqueda_padron_por_igualdad 'TOMAS BUSTOS', 1
EXEC busqueda_padron '"TOMAS" NEAR "BUSTOS"', 1
EXEC [api_padrones_busqueda_avanzada_2025] NULL,null,'TOMAS BUSTOS'

*/

CREATE OR ALTER PROCEDURE dbo.api_padrones_busqueda_avanzada_2025
@p_tipo_persona char(1), -- F o J o null 
@p_taxid varchar(100),
@p_razon_social varchar(100) = null,
@p_apellido varchar(100) = null,
@p_nombre varchar(100) = null,
@p_genero char(1) = null,
@p_provincia char(2) = null,
@p_edad_min int = null, 
@p_edad_max int = null,
@max_rows int = 300, 
@p_todos_los_paises tinyint = 1 --> 1 = todos los paises, 0 = solo argentina, 2 = cualquier pais menos argentina 

AS
BEGIN
 SET NOCOUNT ON;
 declare @busqueda varchar(500) = '---'
 declare @busqueda_omitidos varchar(500) = '---'
 declare @busqueda_nombre varchar(500) = '---'
 declare @busqueda_apellido varchar(500) = '---'
 declare @busqueda_apellido_exacto varchar(500) = '---'


 declare @resultado table 
 (mensaje varchar(200), 
  error int, 
  id_padron int, 
  identificacion varchar(50),
  nombre_persona varchar(500), 
  tipo_persona_1 varchar(1),
  tipo_persona varchar(20),
  sexo char(1),
  fecha_nacimiento date,
  fecha_defuncion date, 
  pre_clave varchar(50),
  cuerpo_clave varchar(50),
  suf_clave varchar(50),
  country_code varchar(50),
  identificador varchar(50), 
  ismodified datetime,
  apellidos varchar(500),
  nombres varchar(500), 
  domicilios varchar(max), 
  codigo_provincia varchar(10)) 

  -- Si recibe como parametro provincia, solo va a buscar en argentina
  if (@p_provincia is not null) 
  set @p_todos_los_paises = 0

 -- Si estamos mandado numeros con '.', '-', o espacio, se los elimina 
 select @p_taxid = ltrim(rtrim(@p_taxid))

 if (@p_taxid not like '%[a-z]%' and @p_taxid not like '%[A-Z]%' and @p_taxid like '%.%') 
 begin
  select @p_taxid =  REPLACE(@p_taxid, '.','')
 end 

 if (@p_taxid not like '%[a-z]%' and @p_taxid not like '%[A-Z]%' and @p_taxid like '%-%') 
 begin
  select @p_taxid =  REPLACE(@p_taxid, '-','')
 end 

 if (@p_taxid not like '%[a-z]%' and @p_taxid not like '%[A-Z]%' and @p_taxid like '% %') 
 begin
  select @p_taxid =  REPLACE(@p_taxid, ' ','')
 end 
 -- 

 select @p_razon_social = ltrim(rtrim(@p_razon_social))
 select @p_nombre = ltrim(rtrim(@p_nombre))
 select @p_apellido = ltrim(rtrim(@p_apellido))

 /*
  if (@p_tipo_persona is null or @p_tipo_persona not in ('F','J'))
  begin
  select 'Debe mandar Tipo de persona (F o J)' as mensaje, 1 as error
  return
  end 
 
  if (@p_tipo_persona = 'F' and @p_taxid is null and @p_razon_social is null)
  --and((@p_nombre is null and @p_apellido is not null) or 
  --(@p_nombre is not null and @p_apellido is null))
  and @p_apellido is null
  begin
  select 'Debe mandar apellido' as mensaje, 2 as error
  return
  end 
 
  if (@p_tipo_persona = 'F' and @p_taxid is null and @p_razon_social is null)
  and @p_apellido is not null
  and @p_nombre is null
  and @p_genero is null
  and @p_provincia is null
  and @p_edad_min is null 
  and @p_edad_max is null
 
  begin
  select 'Debe mandar apellido y algún parámetro más' as mensaje, 3 as error
  return
  end 
 
 
 
  if (@p_tipo_persona = 'J' and @p_taxid is null and @p_razon_social is null)
  begin
  select 'Debe mandar tax-id o razón social' as mensaje, 4 as error
  return
  end
  */



 /*
  IF (isnull(@p_taxid,'') != '') --> Prioriza busqueda por lo que viene en el campo taxid--> lo hace mas abajo, si tenemos taxid busca por ese campo
  begin
  select @busqueda = @p_taxid 
  end 
  else 
  begin
  */


 IF (isnull(@p_razon_social,'') != '')
 begin
  select @busqueda = @p_razon_social 
 end

 IF (isnull(@p_taxid,'') != '')
 begin
  select @busqueda = @p_taxid 
 end
 
 IF (@p_tipo_persona = 'F')
 begin 
  IF (isnull(@p_apellido,'') != '' and isnull(@p_nombre,'') != '')
  begin
   select @busqueda = isnull(@p_apellido,'') + ' ' + isnull(@p_nombre,'')
  end
 end
 
 /*
  end
  */



 --select @busqueda, @busqueda_apellido, @busqueda_nombre

 if (isnumeric(@busqueda) != 1 and @busqueda != '---')
 begin

  /* 20/02/2025: si hay varios espacios, los convierte a uno solo */ 
  while @busqueda like '%  %'
  begin
   select @busqueda = REPLACE(@busqueda, '  ',' ')
  end

  /* 20/02/2025: saco las palabras de menos de 2 letras */ 
  --SELECT @busqueda = STUFF((SELECT ' ' + item FROM dbo.DelimitedSplit8K(@busqueda, ' ') where len(item) > 2 FOR XML PATH ('')), 1, 1, '')
  -- 25/02/2025: lo sacamos porque cambiando el 'transform noise words' a 1, ya funciona por ejemplo BANCO DE GALICIA (con 'transform noise words' en 0, no traia nada, habia que buscar como BANCO GALICIA)
  
  /* 25/02/2025: Pero si eliminamos las palabras que tenemos en la tabla omitidos
   Por ejemplo si buscamos 'FIDELITAS SOCIEDAD ANONIMA' no va a traer nada pero al eliminar el 'SOCIEDAD ANONIMA' si
   */

  if isnull(@p_tipo_persona,'') != 'F'
  begin
   select @busqueda_omitidos = dbo.Eliminar_omitidos(@busqueda)
  end 
  /**/

  if @busqueda not like '% %' and len(@busqueda) > 2 and @busqueda not like '%*' 
   -- Si es una sola palabra (no tiene espacios), es de mas de 2 digitos y no termina es *, se lo agregamos 
   select @busqueda = @busqueda + '*'
  if @busqueda not like '% near %'
   select @busqueda =  '"' + REPLACE(@busqueda,' ','" near "') + '"' 
  
  if isnull(@p_tipo_persona,'') != 'F'
  begin
  if @busqueda_omitidos not like '% near %'
   select @busqueda_omitidos =  '"' + REPLACE(@busqueda_omitidos,' ','" near "') + '"' 
  end
 end 

 if (isnumeric(@busqueda) = 1 and @p_taxid is null )
 begin
  set @p_taxid = @busqueda 
 end
 if (isnumeric(@busqueda) = 0 and @p_taxid is not null )
 begin
  set @p_taxid = null  
 end


 if (@p_nombre is not null)
 begin
  set @busqueda_nombre = @p_nombre
  if @busqueda_nombre not like '% %' and len(@busqueda_nombre) > 2 and @busqueda_nombre not like '%*' 
   select @busqueda_nombre = @busqueda_nombre + '*'
  if @busqueda_nombre not like '% near %'
   select @busqueda_nombre =  '"' + REPLACE(@busqueda_nombre,' ','" near "') + '"' 
 end 

 if (@p_apellido is not null)
 begin
  set @busqueda_apellido_exacto = '"' + @p_apellido + '"'
  set @busqueda_apellido = @p_apellido
  if @busqueda_apellido not like '% %' and len(@busqueda_apellido) > 2 and @busqueda_apellido not like '%*' 
  begin
   select @busqueda_apellido = @busqueda_apellido + '*'
  end 
  if @busqueda_apellido not like '% near %'
  begin 
   select @busqueda_apellido =  '"' + REPLACE(@busqueda_apellido,' ','" near "') + '"' 
  end
 end 

 declare @max_rows_2 int = @max_rows * 1.2 --> buscamos un poco más, para que cuando elimine por distinct me queden max_rows

 --select @busqueda busqueda, @busqueda_omitidos busqueda_omitidos, @p_apellido apellido, @busqueda_apellido busqueda_apellido, @p_nombre nombre , @busqueda_nombre busqueda_nombre

 if @p_taxid is not null 
 begin 
  insert into @resultado
  -- Para que en los casos que lo va a buscar en Afip, y lo da de alta en la BD
  -- Apenas lo damos de alta, no lo encuentra por fulltext, entonces lo buscamos por identificacion por las dudas....
  SELECT distinct top(@max_rows_2) 'ok' as mensaje, 0 as error, PADRONES.id_padron, identificacion,nombre_persona,tipo_persona,iif(tipo_persona='F','FISICA','JURIDICA') AS tipo_persona,sexo
  ,c02_fecha_nac as fecha_nacimiento,fecha_defuncion,pre_clave,cuerpo_clave,suf_clave,
  identificadores.country_code,
        identificadores.identificador as identificador,isnull(padrones.ismodified,'1901-01-01') as ismodified,
  padrones.apellidos,padrones.nombres, dd.domicilios, dd.prv_codigo
  from dbo.padrones
   inner join identificadores on identificadores.identificador = padrones.identificador
   left join datos_personas on datos_personas.c01_cuit = padrones.identificacion
   left join (SELECT cuit,prv_codigo,domicilios=STUFF(
         (SELECT distinct '; Domicilio:' + replace(domicilio,';',',') + 
      iif(isnull(codpos,'') != '', ' (CP ' + convert(varchar,codpos) + ')','') +
      iif(isnull(loc_nombre,'') != '', ' - ' + loc_nombre,'') + 
      iif(isnull(prv_nombre,'') != '', ' - ' + prv_nombre,'') 
      AS [text()]
       FROM domicilios_todos DT
       WHERE DT.cuit = T.cuit and DT.visible = 1 and DT.nombre_fuente in ('AFIP','RENAPER')
         and (@p_provincia is null or DT.prv_codigo = @p_provincia)
      FOR XML PATH('')), 1, 2, '') 
    FROM domicilios_todos T where T.visible = 1 
    and T.nombre_fuente in ('AFIP','RENAPER') and (@p_provincia is null or T.prv_codigo = @p_provincia)

    GROUP BY cuit,prv_codigo) dd 
    
    on (dd.cuit = padrones.identificacion)

   WHERE /*@p_taxid is not null 
      and identificacion = @p_taxid */

     CONTAINS((identificacion,cuerpo_clave),@p_taxid) 
     and habilitado = 1
 end  

 if (@p_taxid is null 
     and isnull(@busqueda,'---') != '---')
  begin 

  insert into @resultado

  SELECT distinct top(@max_rows_2) 'ok' as mensaje, 0 as error, PADRONES.id_padron, identificacion,nombre_persona,tipo_persona,iif(tipo_persona='F','FISICA','JURIDICA') AS tipo_persona,sexo
  ,c02_fecha_nac as fecha_nacimiento,fecha_defuncion,pre_clave,cuerpo_clave,suf_clave,
  identificadores.country_code,
        identificadores.identificador as identificador,isnull(padrones.ismodified,'1901-01-01') as ismodified,
  padrones.apellidos,padrones.nombres, dd.domicilios, dd.prv_codigo
  from dbo.padrones
  inner join identificadores on identificadores.identificador = padrones.identificador

  left join datos_personas on datos_personas.c01_cuit = padrones.identificacion

   left join (SELECT cuit,prv_codigo,domicilios=STUFF(
         (SELECT distinct '; Domicilio:' + replace(domicilio,';',',') + 
      iif(isnull(codpos,'') != '', ' (CP ' +  convert(varchar,codpos) + ')','') +
      iif(isnull(loc_nombre,'') != '', ' - ' + loc_nombre,'') + 
      iif(isnull(prv_nombre,'') != '', ' - ' + prv_nombre,'') 
      AS [text()]
       FROM domicilios_todos DT
       WHERE DT.cuit = T.cuit and DT.visible = 1 and DT.nombre_fuente in ('AFIP','RENAPER')
         and (@p_provincia is null or DT.prv_codigo = @p_provincia)
      FOR XML PATH('')), 1, 2, '') 
    FROM domicilios_todos T where T.visible = 1 
    and T.nombre_fuente in ('AFIP','RENAPER') and (@p_provincia is null or T.prv_codigo = @p_provincia)

    GROUP BY cuit,prv_codigo) dd 
    
    on (dd.cuit = padrones.identificacion)

  WHERE 
   ( CONTAINS(padrones.*,@busqueda) OR CONTAINS(padrones.*,@busqueda_omitidos))
    and tipo_persona = iif(@p_tipo_persona is not null, @p_tipo_persona, tipo_persona) 
   
   and iif(@p_genero is null, 1, iif(@p_genero = padrones.sexo,1,0)) = 1 

   and iif(@p_todos_los_paises = 1, 1, 
            iif(@p_todos_los_paises = 2 and identificadores.country_code not in ('AR'),1,   
            iif(@p_todos_los_paises = 0 and identificadores.country_code in ('AR') and @p_provincia is not null and dd.domicilios is not null,1,
           iif(@p_todos_los_paises = 0 and identificadores.country_code in ('AR') and @p_provincia is null,1,0)))) = 1 
    
   -- and iif(@p_edad_min is null and @p_edad_max is null, 1, 
   --     iif((DATEDIFF(DAY, datos_personas.c02_fecha_nac, GETDATE()) / 365.25) between @p_edad_min and @p_edad_max,1,0)) = 1 

    and iif(@p_edad_min is null and @p_edad_max is null, 1, 
        iif((DATEDIFF(DAY, datos_personas.c02_fecha_nac, GETDATE()) / 365.25) between @p_edad_min and @p_edad_max 
          and datos_personas.fecha_defuncion is null 
          and isnull(datos_personas.defuncion,0) = 0,1,0)) = 1


    and habilitado = 1
  end   

  declare @con_apellido_exacto int = 0

  if (@p_taxid is null 
      and isnull(@p_apellido,'') != '' 
      and isnull(@busqueda_nombre,'---') = '---' )
  begin
  insert into @resultado
  
  SELECT distinct top(@max_rows_2) 'ok' as mensaje, 0 as error, PADRONES.id_padron, identificacion,nombre_persona,tipo_persona,iif(tipo_persona='F','FISICA','JURIDICA') AS tipo_persona,sexo
  ,c02_fecha_nac as fecha_nacimiento,fecha_defuncion,pre_clave,cuerpo_clave,suf_clave,
  identificadores.country_code,
        identificadores.identificador as identificador,isnull(padrones.ismodified,'1901-01-01') as ismodified,
  padrones.apellidos,padrones.nombres, dd.domicilios, dd.prv_codigo
  from dbo.padrones
  inner join identificadores on identificadores.identificador = padrones.identificador

  left join datos_personas on datos_personas.c01_cuit = padrones.identificacion

   inner join (SELECT cuit,prv_codigo,domicilios=STUFF(
         (SELECT distinct '; Domicilio:' + replace(domicilio,';',',') + 
      iif(isnull(codpos,'') != '', ' (CP ' +  convert(varchar,codpos) + ')','') +
      iif(isnull(loc_nombre,'') != '', ' - ' + loc_nombre,'') + 
      iif(isnull(prv_nombre,'') != '', ' - ' + prv_nombre,'') 
      AS [text()]
       FROM domicilios_todos DT
       WHERE DT.cuit = T.cuit and DT.visible = 1 and DT.nombre_fuente in ('AFIP','RENAPER')
         and (@p_provincia is null or DT.prv_codigo = @p_provincia)
      FOR XML PATH('')), 1, 2, '') 
    FROM domicilios_todos T where T.visible = 1 
    and T.nombre_fuente in ('AFIP','RENAPER') and (@p_provincia is null or T.prv_codigo = @p_provincia)

    GROUP BY cuit,prv_codigo) dd 
    
    on (dd.cuit = padrones.identificacion)

  WHERE 
    CONTAINS(padrones.apellidos,@busqueda_apellido_exacto)
    and padrones.apellidos = @p_apellido
    and tipo_persona = iif(@p_tipo_persona is not null, @p_tipo_persona, tipo_persona) 
    
    and iif(@p_genero is null, 1, iif(@p_genero = padrones.sexo,1,0)) = 1 

   and iif(@p_todos_los_paises = 1, 1, 
            iif(@p_todos_los_paises = 2 and identificadores.country_code not in ('AR'),1,   
            iif(@p_todos_los_paises = 0 and identificadores.country_code in ('AR') and @p_provincia is not null and dd.domicilios is not null,1,
           iif(@p_todos_los_paises = 0 and identificadores.country_code in ('AR') and @p_provincia is null,1,0)))) = 1 
       
    and iif(@p_edad_min is null and @p_edad_max is null, 1, 
        iif((DATEDIFF(DAY, datos_personas.c02_fecha_nac, GETDATE()) / 365.25) between @p_edad_min and @p_edad_max 
          and datos_personas.fecha_defuncion is null 
          and isnull(datos_personas.defuncion,0) = 0,1,0)) = 1 
    and habilitado = 1

  set @con_apellido_exacto = @@ROWCOUNT
  end

  if (@p_taxid is null 
      and isnull(@busqueda_apellido,'---') != '---' 
      and isnull(@busqueda_nombre,'---') = '---' 
   and @con_apellido_exacto = 0)
  begin 
  insert into @resultado
  
  SELECT distinct top(@max_rows_2) 'ok' as mensaje, 0 as error, PADRONES.id_padron, identificacion,nombre_persona,tipo_persona,iif(tipo_persona='F','FISICA','JURIDICA') AS tipo_persona,sexo
  ,c02_fecha_nac as fecha_nacimiento,fecha_defuncion,pre_clave,cuerpo_clave,suf_clave,
  identificadores.country_code,
        identificadores.identificador as identificador,isnull(padrones.ismodified,'1901-01-01') as ismodified,
  padrones.apellidos,padrones.nombres, dd.domicilios, dd.prv_codigo
  from dbo.padrones
  inner join identificadores on identificadores.identificador = padrones.identificador

  left join datos_personas on datos_personas.c01_cuit = padrones.identificacion

   inner join (SELECT cuit,prv_codigo,domicilios=STUFF(
         (SELECT distinct '; Domicilio:' + replace(domicilio,';',',') + 
      iif(isnull(codpos,'') != '', ' (CP ' +  convert(varchar,codpos) + ')','') +
      iif(isnull(loc_nombre,'') != '', ' - ' + loc_nombre,'') + 
      iif(isnull(prv_nombre,'') != '', ' - ' + prv_nombre,'') 
      AS [text()]
       FROM domicilios_todos DT
       WHERE DT.cuit = T.cuit and DT.visible = 1 and DT.nombre_fuente in ('AFIP','RENAPER')
         and (@p_provincia is null or DT.prv_codigo = @p_provincia)
      FOR XML PATH('')), 1, 2, '') 
    FROM domicilios_todos T where T.visible = 1 
    and T.nombre_fuente in ('AFIP','RENAPER') and (@p_provincia is null or T.prv_codigo = @p_provincia)

    GROUP BY cuit,prv_codigo) dd 
    
    on (dd.cuit = padrones.identificacion)

  WHERE CONTAINS(padrones.apellidos,@busqueda_apellido)
    and tipo_persona = iif(@p_tipo_persona is not null, @p_tipo_persona, tipo_persona) 
    
    and iif(@p_genero is null, 1, iif(@p_genero = padrones.sexo,1,0)) = 1 


   and iif(@p_todos_los_paises = 1, 1, 
            iif(@p_todos_los_paises = 2 and identificadores.country_code not in ('AR'),1,   
            iif(@p_todos_los_paises = 0 and identificadores.country_code in ('AR') and @p_provincia is not null and dd.domicilios is not null,1,
           iif(@p_todos_los_paises = 0 and identificadores.country_code in ('AR') and @p_provincia is null,1,0)))) = 1  

    and iif(@p_edad_min is null and @p_edad_max is null, 1, 
        iif((DATEDIFF(DAY, datos_personas.c02_fecha_nac, GETDATE()) / 365.25) between @p_edad_min and @p_edad_max 
          and datos_personas.fecha_defuncion is null 
          and isnull(datos_personas.defuncion,0) = 0,1,0)) = 1 
    and habilitado = 1
  end
  
  if (@p_taxid is null 
      and isnull(@p_apellido,'') != '' 
      and isnull(@busqueda_nombre,'---') != '---')
  begin 
  insert into @resultado

  SELECT distinct top(@max_rows_2) 'ok' as mensaje, 0 as error, PADRONES.id_padron, identificacion,nombre_persona,tipo_persona,iif(tipo_persona='F','FISICA','JURIDICA') AS tipo_persona,sexo
  ,c02_fecha_nac as fecha_nacimiento,fecha_defuncion,pre_clave,cuerpo_clave,suf_clave,
  identificadores.country_code,
        identificadores.identificador as identificador,isnull(padrones.ismodified,'1901-01-01') as ismodified,
  padrones.apellidos,padrones.nombres, dd.domicilios, dd.prv_codigo
  from dbo.padrones
  inner join identificadores on identificadores.identificador = padrones.identificador

  left join datos_personas on datos_personas.c01_cuit = padrones.identificacion

   left join (SELECT cuit,prv_codigo,domicilios=STUFF(
         (SELECT distinct '; Domicilio:' + replace(domicilio,';',',') + 
      iif(isnull(codpos,'') != '', ' (CP ' +  convert(varchar,codpos) + ')','') +
      iif(isnull(loc_nombre,'') != '', ' - ' + loc_nombre,'') + 
      iif(isnull(prv_nombre,'') != '', ' - ' + prv_nombre,'') 
      AS [text()]
       FROM domicilios_todos DT
       WHERE DT.cuit = T.cuit and DT.visible = 1 and DT.nombre_fuente in ('AFIP','RENAPER')
         and (@p_provincia is null or DT.prv_codigo = @p_provincia)
      FOR XML PATH('')), 1, 2, '') 
    FROM domicilios_todos T where T.visible = 1 
    and T.nombre_fuente in ('AFIP','RENAPER') and (@p_provincia is null or T.prv_codigo = @p_provincia)

    GROUP BY cuit,prv_codigo) dd 
    
    on (dd.cuit = padrones.identificacion)

  WHERE @p_taxid is null 
    and isnull(@busqueda,'---') = '---' 
    and isnull(@busqueda_apellido,'---') != '---' 
    and isnull(@busqueda_nombre,'---') != '---' 
    and CONTAINS(padrones.apellidos,@busqueda_apellido_exacto)
    and padrones.apellidos = @p_apellido
    and CONTAINS(padrones.nombres,@busqueda_nombre)
    and tipo_persona = iif(@p_tipo_persona is not null, @p_tipo_persona, tipo_persona) 

    and iif(@p_genero is null, 1, iif(@p_genero = padrones.sexo,1,0)) = 1 


   and iif(@p_todos_los_paises = 1, 1, 
            iif(@p_todos_los_paises = 2 and identificadores.country_code not in ('AR'),1,   
            iif(@p_todos_los_paises = 0 and identificadores.country_code in ('AR') and @p_provincia is not null and dd.domicilios is not null,1,
           iif(@p_todos_los_paises = 0 and identificadores.country_code in ('AR') and @p_provincia is null,1,0)))) = 1  

    --and iif(@p_edad_min is null and @p_edad_max is null, 1, 
    --    iif((DATEDIFF(DAY, datos_personas.c02_fecha_nac, GETDATE()) / 365.25) between @p_edad_min and @p_edad_max,1,0)) = 1 
    and iif(@p_edad_min is null and @p_edad_max is null, 1, 
        iif((DATEDIFF(DAY, datos_personas.c02_fecha_nac, GETDATE()) / 365.25) between @p_edad_min and @p_edad_max 
          and datos_personas.fecha_defuncion is null 
          and isnull(datos_personas.defuncion,0) = 0,1,0)) = 1
    and habilitado = 1

    end 
  --) sql
  set @con_apellido_exacto = @@ROWCOUNT

  if (@p_taxid is null 
      and isnull(@busqueda_apellido,'---') != '---' 
      and isnull(@busqueda_nombre,'---') != '---'
   and @con_apellido_exacto = 0)
  begin
  insert into @resultado

  SELECT distinct top(@max_rows_2) 'ok' as mensaje, 0 as error, PADRONES.id_padron, identificacion,nombre_persona,tipo_persona,iif(tipo_persona='F','FISICA','JURIDICA') AS tipo_persona,sexo
  ,c02_fecha_nac as fecha_nacimiento,fecha_defuncion,pre_clave,cuerpo_clave,suf_clave,
  identificadores.country_code,
        identificadores.identificador as identificador,isnull(padrones.ismodified,'1901-01-01') as ismodified,
  padrones.apellidos,padrones.nombres, dd.domicilios, dd.prv_codigo
  from dbo.padrones
  inner join identificadores on identificadores.identificador = padrones.identificador

  left join datos_personas on datos_personas.c01_cuit = padrones.identificacion

   left join (SELECT cuit,prv_codigo,domicilios=STUFF(
         (SELECT distinct '; Domicilio:' + replace(domicilio,';',',') + 
      iif(isnull(codpos,'') != '', ' (CP ' +  convert(varchar,codpos) + ')','') +
      iif(isnull(loc_nombre,'') != '', ' - ' + loc_nombre,'') + 
      iif(isnull(prv_nombre,'') != '', ' - ' + prv_nombre,'') 
      AS [text()]
       FROM domicilios_todos DT
       WHERE DT.cuit = T.cuit and DT.visible = 1 and DT.nombre_fuente in ('AFIP','RENAPER')
         and (@p_provincia is null or DT.prv_codigo = @p_provincia)
      FOR XML PATH('')), 1, 2, '') 
    FROM domicilios_todos T where T.visible = 1 
    and T.nombre_fuente in ('AFIP','RENAPER') and (@p_provincia is null or T.prv_codigo = @p_provincia)

    GROUP BY cuit,prv_codigo) dd 
    
    on (dd.cuit = padrones.identificacion)

  WHERE @p_taxid is null 
    and isnull(@busqueda,'---') = '---' 
    and isnull(@busqueda_apellido,'---') != '---' 
    and isnull(@busqueda_nombre,'---') != '---' 
    and CONTAINS(padrones.apellidos,@busqueda_apellido)
    and CONTAINS(padrones.nombres,@busqueda_nombre)
    and tipo_persona = iif(@p_tipo_persona is not null, @p_tipo_persona, tipo_persona) 

    and iif(@p_genero is null, 1, iif(@p_genero = padrones.sexo,1,0)) = 1 

   and iif(@p_todos_los_paises = 1, 1, 
            iif(@p_todos_los_paises = 2 and identificadores.country_code not in ('AR'),1,   
            iif(@p_todos_los_paises = 0 and identificadores.country_code in ('AR') and @p_provincia is not null and dd.domicilios is not null,1,
           iif(@p_todos_los_paises = 0 and identificadores.country_code in ('AR') and @p_provincia is null,1,0)))) = 1 

   -- and iif(@p_edad_min is null and @p_edad_max is null, 1, 
   --     iif((DATEDIFF(DAY, datos_personas.c02_fecha_nac, GETDATE()) / 365.25) between @p_edad_min and @p_edad_max,1,0)) = 1 

    and iif(@p_edad_min is null and @p_edad_max is null, 1, 
        iif((DATEDIFF(DAY, datos_personas.c02_fecha_nac, GETDATE()) / 365.25) between @p_edad_min and @p_edad_max 
          and datos_personas.fecha_defuncion is null 
          and isnull(datos_personas.defuncion,0) = 0,1,0)) = 1

    and habilitado = 1


  
end

/*
-- 17/02/2025: 
-- Que solo muestre una provincia, cuando no se filtra por provincia
-- Se definio para personas fisicas se toma como valida la de Renaper, para Juridicas la de AFIP
-- (en el caso de Felix El Idd tiene domicilio en Prov Bs As para Renaper y CABA para AFIP)
*/

  declare @id_padron int, @cuit varchar(20), @cantidad int, @tipo_persona char(1), @provincia_elegida char(1)  
  declare wc_prov cursor for
     select id_padron, identificacion, tipo_persona, count(*) 
      from @resultado res
     group by id_padron,  identificacion, tipo_persona
     having count(*) > 1 
  open wc_prov
  Fetch next from wc_prov INTO @id_padron, @cuit, @tipo_persona, @cantidad
  WHILE @@fetch_status = 0
  BEGIN 
   set @provincia_elegida = null
   if @tipo_persona = 'F' 
   begin
    select @provincia_elegida = min(prv_codigo) from domicilios_todos where cuit = @cuit and nombre_fuente in ('RENAPER')
   end 
   else
   begin
    select @provincia_elegida = min(prv_codigo) from domicilios_todos where cuit = @cuit and nombre_fuente in ('AFIP')
   end 
   if @provincia_elegida is null
   begin
    select @provincia_elegida = min(codigo_provincia) from @resultado res where id_padron = @id_padron and codigo_provincia is not null 
   end 
   if @provincia_elegida is not null
   begin
    delete from @resultado where id_padron = @id_padron and codigo_provincia != @provincia_elegida 
   end 
   Fetch next from wc_prov INTO @id_padron, @cuit, @tipo_persona, @cantidad
  END 
  CLOSE wc_prov
  DEALLOCATE wc_prov 

/**/
  
  select distinct top(@max_rows) res.*, provincias.prv_nombre as provincia 
  from @resultado res
  left join provincias on provincias.country_code= 'AR' and provincias.codigo_afip = res.codigo_provincia 


END

GO

Used By

No items found