dbo.TE_PERSONAL_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,,>
/*
SELECT COUNT(*) FROM te_personal_2
select top 100 * from te_personal_2

exec TE_PERSONAL_2_DOMICILIOS 

*/


-- Description: <Description,,>
-- =============================================
CREATE OR ALTER PROCEDURE dbo.TE_PERSONAL_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(20)
 declare @domicilio    varchar(300)
 declare @cp      varchar(50)
 declare @loc     varchar(150)
 declare @prov     varchar(200)

 declare @codigo_provincia  varchar(2) = null


 DECLARE PERSONAL CURSOR FOR

 select top 100 id_pers,
     cuit,
     LTRIM(RTRIM(direccion)),
     iif(LTRIM(RTRIM(cpostal)) != '', cpostal, null) as cpostal,
     LTRIM(RTRIM(localidad)),
     LTRIM(RTRIM(provincia))
 from te_personal_2
 where _domicilios_proc = 0

 OPEN PERSONAL

 FETCH NEXT FROM PERSONAL INTO @id, @cuit, @domicilio, @cp, @loc, @prov

 WHILE @@FETCH_STATUS = 0 BEGIN

  /* depuración */
  EXEC sp_depurar_domicilios @cuit


  /* DEBUG 
   select @cuit as CUIT, @domicilio as DOMICILIO, @cp as CODIGOPOSTAL, @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


  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_id_domicilio as ID,@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] @domicilio, @w_domicilio


   /* DEBUG 
    SELECT @w_domicilio 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


  /* Verificamos si hay que insertar nuevo domicilio */
  if (@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, nombre_fuente, procesado, isLast)
   values
    (@cuit, @domicilio, 54, 'ARGENTINA', @codigo_provincia, @prov, @loc, @cp,
    GETDATE(), 1, iif(@tiene_tipo_d > 0, 'O', 'D'), 'te_personal_2', 1, 0)


   /* DEBUG */
   select @cuit as CUIT, @domicilio as DOMICILIO, @cp as CODIGOPOSTAL, @loc AS LOCALIDAD, @prov as PROVINCIA
   select @tiene_tipo_d as TIENE_TIPO_D, iif(@tiene_tipo_d > 0, 'O', 'D') AS TIPO_NUEVO
   exec sp_obtener_domicilios @cuit


  end else

   /* 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, nombre_fuente, procesado, isLast)
    values
     (@cuit, @domicilio, 54, 'ARGENTINA', @codigo_provincia, @prov, @loc, @cp,
     GETDATE(), 1, 'D', 'te_personal_2', 1, 0)

    /*SELECT @tiene_tipo_d as HAY_MATCH_D*/

   end


  /*****/

  /* DEBUG 
   exec sp_obtener_domicilios @cuit */


  UPDATE te_personal_2 SET _domicilios_proc = 1 WHERE id_pers = @id
  
  FETCH NEXT FROM PERSONAL INTO @id, @cuit, @domicilio, @cp, @loc, @prov

 END

 CLOSE PERSONAL
 DEALLOCATE PERSONAL

 
END
GO

Used By

No items found