dbo.TE_TASA_2_DOMICILIOS

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

SQL Script

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

EXEC TE_TASA_2_DOMICILIOS
SELECT TOP 100 * FROM TE_tasa_temp

**/

-- =============================================
CREATE OR ALTER PROCEDURE dbo.TE_TASA_2_DOMICILIOS
 -- Add the parameters for the stored procedure here
  
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;


    -- Insert statements for procedure here

 declare @id      int
 declare @cuit     varchar(50)
 declare @calle     varchar(150)
 declare @nro     varchar(50)
 declare @piso     varchar(50)
 declare @dpto     varchar(50)
 declare @cp      varchar(50)
 declare @loc     varchar(150)
 declare @prov     varchar(150)

 declare @callenro    varchar(201)
 declare @thisid     int
 declare @codigo_provincia  varchar(2) = null


 DECLARE TETASA CURSOR FOR

 select top 1 id_tasa, TE_tasa_temp.CUITS, TE_tasa_temp.Calle, TE_tasa_temp.Nro,
     TE_tasa_temp.Piso, TE_tasa_temp.Depto, TE_tasa_temp.cd_postal,
     TE_tasa_temp.Localidad, TE_tasa_temp.Provincia
 from TE_tasa_temp
 where activo = 1
 and isnull(_domicilios_proc, 0) = 0

 OPEN TETASA

 FETCH NEXT FROM TETASA INTO @id, @cuit, @calle, @nro, @piso, @dpto, @cp, @loc, @prov

 WHILE @@FETCH_STATUS = 0 BEGIN

  /* depúración */
  /*EXEC sp_depurar_domicilios @cuit*/


  SET @nro = iif(isnumeric(@nro) > 0, iif(convert(int, @nro) > 0, convert(varchar, convert(int, @nro)), NULL), NULL)
  SET @callenro = iif(@nro is not null, @calle + ' ' + @nro, @calle)

  /* DEBUG */
  select @cuit as CUIT, @callenro as DOMICILIO, @piso as PISO, @dpto as DPTO, @cp as CODPOS, @loc AS LOCALIDAD, @prov as PROVINCIA 


  /*** procesar domicilios preexistentes depurados y matchear con el de la fuente ***/

  declare @w_id int, 
    @w_domicilio varchar(500),
    @w_pai_nombre varchar(100),
    @w_prv_nombre varchar(100),
    @w_loc_nombre varchar(100),
    @w_codpos  varchar(100),
    @w_tipo_domicilio varchar(100),
    @w_created datetime,

    @lista_id   varchar(max) = null,
    @match    tinyint = 0,
    @hay_match   tinyint = 0,
    @tiene_tipo_d  tinyint = 0


  SET @tiene_tipo_d = 0

  DECLARE DOMIC CURSOR FOR 

  select top 150 id_domicilio,
      replace(domicilio,'?','') as domicilio,
      pai_nombre,
      prv_nombre,
      loc_nombre,
      replace(codpos,'.','') as codpos,
      tipo_domicilio,
      created
  from domicilios_todos 
  where cuit = @cuit 
  and visible = 1 


  OPEN DOMIC

  FETCH NEXT FROM DOMIC INTO @w_id, @w_domicilio, @w_pai_nombre, @w_prv_nombre, @w_loc_nombre, @w_codpos, @w_tipo_domicilio, @w_created

  WHILE @@FETCH_STATUS = 0 BEGIN

   /*SELECT @cuit,@loc,@prov,@calle,@nro,@piso,@dpto,@w_domicilio AS DOMICILIO, @w_loc_nombre AS LOCALIDAD, @w_prv_nombre AS PROVINCIA*/

   /* comparo el compuesto de calle y nro de la fuente con el domicilio obtenido */
   set @match = 0
   exec @match = [sp_comparo_domicilios] @callenro, @w_domicilio


   /* DEBUG
    SELECT @w_id as ID, @match as MATCH */


   if (@match = 1) begin

    /* domicilio ya existente (coincidencia): marco el matcheo positivo */

    if (@hay_match = 0) begin     
     set @hay_match = 1
    end

   end


   /* Busco si existe domicilio D o E en todos los resultados */
   if (@tiene_tipo_d = 0) begin
    if (CHARINDEX('D', @w_tipo_domicilio, 1) > 0 OR CHARINDEX('E', @w_tipo_domicilio, 1) > 0) begin
     set @tiene_tipo_d = 1
    end
   end


   FETCH NEXT FROM DOMIC INTO @w_id, @w_domicilio, @w_pai_nombre, @w_prv_nombre, @w_loc_nombre, @w_codpos, @w_tipo_domicilio, @w_created
  END 

  CLOSE DOMIC
  DEALLOCATE DOMIC

  select @hay_match as MATCH

  /* Verificamos si hay que insertar nuevo domicilio */
  if (convert(int,@hay_match) = 0) begin

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

   /* si es un nuevo domicilio, cuando tiene D o E lo inserto como otro, sino como D */

   insert into domicilios_todos 
    (cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
    created, visible, tipo_domicilio, piso, depto, nombre_fuente, procesado, isLast,
    calle, altura)
   values
    (@cuit, @callenro, 54, 'ARGENTINA', @codigo_provincia, @prov, @loc, @cp,
    GETDATE(), 1, iif(@tiene_tipo_d > 0, 'O', 'D'), @piso, @dpto, 'TE_tasa_temp', 1, 0,
    @calle, @nro)



   select @tiene_tipo_d as TIENE_TIPO_D, iif(@tiene_tipo_d > 0, 'O', 'D') AS TIPO_NUEVO

  end else begin

   /* En caso de existir un match, sólo lo agrego como D si no existe domicilio con ese tipo */

   if (@tiene_tipo_d = 0) begin

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

    insert into domicilios_todos 
     (cuit, domicilio, pai_codigo, pai_nombre, prv_codigo, prv_nombre, loc_nombre, codpos,
     created, visible, tipo_domicilio, piso, depto, nombre_fuente, procesado, isLast,
     calle, altura)
    values
     (@cuit, @callenro, 54, 'ARGENTINA', @codigo_provincia, @prov, @loc, @cp,
     GETDATE(), 1, 'D', @piso, @dpto, 'TE_tasa_temp', 1, 0,
     @calle, @nro)

    

   end
   SELECT @tiene_tipo_d as HAY_MATCH_D
  end

  /*****/

  UPDATE TE_tasa_temp SET _domicilios_proc = 1 WHERE id_tasa = @id
  EXEC sp_obtener_domicilios @cuit
  
  FETCH NEXT FROM TETASA INTO @id, @cuit, @calle, @nro, @piso, @dpto, @cp, @loc, @prov
 END

 CLOSE TETASA
 DEALLOCATE TETASA

END
GO

Used By

No items found