dbo.OBRASSOCIALES_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 OBRASSOCIALES_2_DOMICILIOS
SELECT TOP 100 * FROM ObrasSociales

**/

-- =============================================
CREATE OR ALTER PROCEDURE dbo.OBRASSOCIALES_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 @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 OBRSOC CURSOR FOR

 select top 10
   cuilRelacionado,
   LTRIM(RTRIM(Calle)),
   LTRIM(RTRIM(Nro)),
   LTRIM(RTRIM(Piso)),
   LTRIM(RTRIM(Dpto)),
   LTRIM(RTRIM(CodPostal)),
   LTRIM(RTRIM(Localidad)),
   LTRIM(RTRIM(Provincia))
 from ObrasSociales
 where isnull(_domicilios_proc, 0) = 0
 and iif(LTRIM(RTRIM(Calle)) != '', Calle, NULL) IS NOT NULL

 OPEN OBRSOC

 FETCH NEXT FROM OBRSOC INTO @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, @calle + ' ' + @nro as DOMICILIO, @piso as PISO, @dpto as DPTO, @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] @callenro, @w_domicilio


   /* DEBUG
    SELECT @w_id_domicilio as ID, @resp 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, 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, 'ObrasSociales', 1, 0,
    @calle, @nro)



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

  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, piso, depto, nombre_fuente, procesado, isLast,
     calle, altura)
    values
     (@cuit, @callenro, 54, 'ARGENTINA', @codigo_provincia, @prov, @loc, @cp,
     GETDATE(), 1, 'D', @piso, @dpto, 'ObrasSociales', 1, 0,
     @calle, @nro)

    /*SELECT @tiene_tipo_d as HAY_MATCH_D*/

   end


  /*****/

  UPDATE ObrasSociales SET _domicilios_proc = 1 WHERE cuilRelacionado = @cuit
  
  FETCH NEXT FROM OBRSOC INTO @cuit, @calle, @nro, @piso, @dpto, @cp, @loc, @prov
 END

 CLOSE OBRSOC
 DEALLOCATE OBRSOC

END
GO

Used By

No items found