dbo.api_padrones_avanzado_20022025

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

7
Name Data Type Length Description
@p_tipo_persona char 1
@p_taxid varchar 50
@p_razon_social varchar 100
@p_apellido varchar 100
@p_nombre varchar 100
@p_provincia char 1
@max_rows int 4

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)

/* 20/02/2025: Para empresas, si se manda la razon social, sacamos las palabras de menos de 2 letras 
Porque por ejemplo si buscamos 'BANCO PRIVADO DE INVERSIONES' no trae nada en cambio si buscamos 'BANCO PRIVADO INVERSIONES', si trae 
*/
 


*/

-- =============================================
/*
[api_padrones_avanzado] 'F', null,null,'SORIA','MARIA INES',0,30
[api_padrones_avanzado] 'F', 'SORIA MARIA INES',null,null,null,null,30

select * from domicilios_todos where cuit = '27208925658' 
select * from padrones where identificacion = '27208925658' 

exec [api_padrones_avanzado] 'J','BANCO          PRIVADO      INVERSIONES'
exec [api_padrones_avanzado_20022025] 'J','BANCO          PRIVADO     de INVERSIONES'


select * from provincias where country_code = 'AR' and codigo_afip is not null order by codigo_afip
*/

CREATE OR ALTER PROCEDURE dbo.api_padrones_avanzado_20022025
@p_tipo_persona char(1), 
@p_taxid varchar(50),
@p_razon_social varchar(100) = null,
@p_apellido varchar(100) = null,
@p_nombre varchar(100) = null,
@p_provincia char(1) = null,
@max_rows int = 30
AS
BEGIN
 SET NOCOUNT ON;
 declare @busqueda varchar(500) = ''
 declare @busqueda_nombre varchar(500) = '---'
 declare @busqueda_apellido varchar(500) = '---'

 select @p_taxid = ltrim(rtrim(@p_taxid))
 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 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))
 begin
  select 'Debe mandar tax-id o apellido y nombre' 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 error
  return
 end 
 
 IF (isnull(@p_taxid,'') != '') --> Prioriza busqueda por lo que viene en el campo taxid
 begin
  select @busqueda = @p_taxid 
 end 
 else 
 begin
  IF (isnull(@p_razon_social,'') != '')
  begin
   select @busqueda = @p_razon_social 
  end
  
  IF (@p_tipo_persona = 'F')
  begin 
   IF (isnull(@p_apellido,'') != '' or isnull(@p_nombre,'') != '')
   begin
    select @busqueda = isnull(@p_apellido,'') + ' ' + isnull(@p_nombre,'')
   end
  end
  
 end



 if (isnumeric(@busqueda) != 1)
 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: Para empresas saco las palabras de menos de 2 letras */ 
  if (@p_tipo_persona = 'J')
  begin
   SELECT @busqueda = STUFF((SELECT ' ' + item FROM dbo.DelimitedSplit8K(@busqueda, ' ') where len(item) > 2 FOR XML PATH ('')), 1, 1, '')
  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 "') + '"' 
   --> si solo viene un numero, no tiene espacios asi que solo le agrega las comillas, pero no hace el replace
   --> siempre manda como primer parametro lo que completaron en el buscador de padron, que a veces es el nombre 
 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 = @p_apellido
  if @busqueda_apellido not like '% %' and len(@busqueda_apellido) > 2 and @busqueda_apellido not like '%*' 
   select @busqueda_apellido = @busqueda_apellido + '*'
  if @busqueda_apellido not like '% near %'
   select @busqueda_apellido =  '"' + REPLACE(@busqueda_apellido,' ','" near "') + '"' 
 end 


 --select @busqueda, @busqueda_apellido, @busqueda_nombre
 select top(@max_rows) * from
 (
  -- 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) 'ok' as error, PADRONES.id_padron, identificacion,nombre_persona,iif(tipo_persona='F','FISICA','JURIDICA') AS tipo_persona,sexo
  ,c02_fecha_nac as fecha_nacimiento,fecha_defuncion,cuerpo_clave,
  identificadores.country_code,
        identificadores.identificador as identificador,isnull(padrones.ismodified,'1901-01-01') as ismodified,
  padrones.apellidos,padrones.nombres, dd.domicilios
  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 @p_taxid is not null and (@p_tipo_persona is null or tipo_persona = @p_tipo_persona)
     and identificacion = @p_taxid 
     and country_code in ('AR') and habilitado = 1
  
  union

  SELECT distinct top(@max_rows) 'ok' as error, PADRONES.id_padron, identificacion,nombre_persona,iif(tipo_persona='F','FISICA','JURIDICA') AS tipo_persona,sexo
  ,c02_fecha_nac as fecha_nacimiento,fecha_defuncion,cuerpo_clave,
  identificadores.country_code,
        identificadores.identificador as identificador,isnull(padrones.ismodified,'1901-01-01') as ismodified,
  padrones.apellidos,padrones.nombres, dd.domicilios
  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.*,@busqueda)
    and @busqueda is not null 
    and (@p_tipo_persona is null or tipo_persona = @p_tipo_persona)
    and country_code in ('AR') and habilitado = 1
   
  union

  SELECT distinct top(@max_rows) 'ok' as error, PADRONES.id_padron, identificacion,nombre_persona,iif(tipo_persona='F','FISICA','JURIDICA') AS tipo_persona,sexo
  ,c02_fecha_nac as fecha_nacimiento,fecha_defuncion,cuerpo_clave,
  identificadores.country_code,
        identificadores.identificador as identificador,isnull(padrones.ismodified,'1901-01-01') as ismodified,
  padrones.apellidos,padrones.nombres, dd.domicilios
  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 (@p_tipo_persona is null or tipo_persona = @p_tipo_persona)
    and country_code in ('AR') 
    and habilitado = 1
    and @p_nombre is not null 
    and @p_apellido is not null
    and CONTAINS(padrones.nombres,@busqueda_nombre)
    and CONTAINS(padrones.apellidos,@busqueda_apellido) 
  ) sql
END
GO

Used By

No items found