dbo.LN_actualizar_legajo_RAMI

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

3
Name Data Type Length Description
@p_contraparte int 4
@p_gestion int 4
@p_user_id int 4

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO

/*

EXEC LN_actualizar_legajo_AGB  183361, NULL,NULL


SELECT LN_CONTRAPARTE_SUB_SET.contraparte,LN_CONTRAPARTE_SUB_SET.set_doc, ln_gestiones.gestion,ln_gestiones.cliente,
ln_gestiones.desde,ln_gestiones.hasta 
 FROM LN_CONTRAPARTE_SUB_SET inner join ln_gestiones on LN_CONTRAPARTE_SUB_SET.contraparte=ln_gestiones.contraparte
where LN_CONTRAPARTE_SUB_SET.activo = 1 and ln_gestiones.vigente = 1
and convert(date,getdate()) between ln_gestiones.desde and ln_gestiones.hasta

DELETE LN_DOCS WHERE CONTRAPARTE = 147088 AND TIPO_DOC = 1048
SELECT * FROM LN_DOCS WHERE CONTRAPARTE = 147088

SELECT * FROM LN_CONTRAPARTES WHERE CONTRAPARTE = 147088
SELECT * FROM PADRONES WHERE ID_PADRON = 37202918

*/

CREATE OR ALTER PROCEDURE dbo.LN_actualizar_legajo_RAMI 

 -- Add the parameters for the stored procedure here

 @p_contraparte          int,
 @p_gestion           int = null,
 @p_user_id           int = null


AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

    -- Insert statements for procedure here

 if (@p_gestion is null) begin
  select @p_gestion = gestion
  from LN_gestiones
  where contraparte = @p_contraparte
  and desde <= GETDATE()
  and hasta >= GETDATE()
 end


 if exists (

    /* Por set de documentos */
    
    select LN_contrapartes.contraparte, LN_productos.producto, 
    ISNULL(LN_cliente_productos.dias_tolerancia_inicial,15) as dias_tolerancia_inicial
    from LN_contrapartes 
    inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
    inner join LN_familia_productos on LN_contraparte_familias.familia = LN_familia_productos.familia
    inner join LN_productos on LN_familia_productos.producto = LN_productos.producto
    inner join LN_familias on 
     (LN_familia_productos.familia = LN_familias.familia
      and LN_contrapartes.cliente = LN_familias.cliente)
    inner join LN_cliente_productos on 
     (LN_familia_productos.producto = LN_cliente_productos.producto
      and LN_contrapartes.cliente = LN_cliente_productos.cliente)
    where LN_contrapartes.contraparte = @p_contraparte
    and LN_contraparte_familias.activo = 1
    and LN_cliente_productos.activo = 1
    and LN_familias.visible = 1
    and LN_familia_productos.activo = 1
    and LN_productos.visible = 1
    and LN_productos.documentos = 1
    and LN_productos.principal = 1 -- esto es nuevo
    group by LN_contrapartes.contraparte, LN_productos.producto, LN_cliente_productos.dias_tolerancia_inicial) 

            begin


  /*select top 1 * from LN_productos*/

  DECLARE @cliente         int
  DECLARE @tipo_doc         int
  DECLARE @modalidad         varchar(1)
  DECLARE @tipo_vigencia        varchar(1)
  DECLARE @dia_vigencia        tinyint
  DECLARE @mes_vigencia        tinyint
  DECLARE @vigencia         datetime
  DECLARE @es_balance         tinyint
  DECLARE @es_manif_bienes       tinyint
  DECLARE @fecha_ultimo_cierre      datetime
  DECLARE @periodicidad_ejercicio      varchar(1)
  DECLARE @carga_inicial        tinyint
  DECLARE @limite_vigencia       datetime = datetimefromparts(1900,1,1,0,0,0,0)
  DECLARE @nueva_version        INT = 1
  DECLARE @limite_carga_inicial      datetime
  DECLARE @prodDocPrincipal       bit -- esto es nuevo
  
  SELECT 
   @cliente = cliente, 
   @fecha_ultimo_cierre = fecha_ultimo_cierre,
   @periodicidad_ejercicio = periodicidad_ejercicio,
   @carga_inicial = ISNULL(carga_inicial,0),
   @limite_carga_inicial = limite_carga_inicial
  FROM LN_contrapartes 
  WHERE contraparte = @p_contraparte

  DECLARE @dias_tolerancia_inicial     tinyint

  /* Por set de documentos */

  select @dias_tolerancia_inicial = ISNULL(LN_cliente_productos.dias_tolerancia_inicial, 15)
  from LN_contrapartes 
  inner join LN_contraparte_familias on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
  inner join LN_familia_productos on LN_contraparte_familias.familia = LN_familia_productos.familia
  inner join LN_productos on LN_familia_productos.producto = LN_productos.producto
  inner join LN_familias on 
   (LN_familia_productos.familia = LN_familias.familia
    and LN_contrapartes.cliente = LN_familias.cliente)
  inner join LN_cliente_productos on 
   (LN_familia_productos.producto = LN_cliente_productos.producto
    and LN_contrapartes.cliente = LN_cliente_productos.cliente)
  where LN_contrapartes.contraparte = @p_contraparte
  and LN_contraparte_familias.activo = 1
  and LN_cliente_productos.activo = 1
  and LN_familias.visible = 1
  and LN_familia_productos.activo = 1
  and LN_productos.visible = 1
  and LN_productos.documentos = 1
  and LN_productos.principal = 1 -- esto es nuevo
  group by LN_cliente_productos.dias_tolerancia_inicial


  /* En caso de que esté la contraparte en carga inicial y no tenga el dato de fecha se lo actualizo */
  if (@carga_inicial = 1 AND @limite_carga_inicial is null) begin
   update LN_contrapartes SET
   limite_carga_inicial = dateadd(second,-1, dateadd(day,1, CONVERT(DATETIME, DATEADD(DAY, @dias_tolerancia_inicial, CONVERT(date, getdate()) )) ))
   where contraparte = @p_contraparte
  end

  DECLARE @tipos_doc_str  varchar(max) = NULL
  DECLARE @bal_man   varchar(1) = NULL  /* Contendrá B o M dependiendo si le correponde balance o manif. bienes */
  DECLARE @quien_carga  varchar(1)
  DECLARE @set_doc INT
  DECLARE TiposDoc CURSOR FOR

  /* Por set de documentos */

  select LN_set_tipo_doc.tipo_doc, LN_tipos_doc_carga_verif.quien_carga,LN_set_tipo_doc.set_doc
  from LN_set_tipo_doc 
  inner join LN_familias on LN_set_tipo_doc.set_doc = LN_familias.set_doc
  inner join LN_contraparte_familias on LN_familias.familia = LN_contraparte_familias.familia
  inner join LN_contrapartes on (LN_contraparte_familias.contraparte = LN_contrapartes.contraparte and LN_familias.cliente = LN_contrapartes.cliente)
  left outer join LN_tipos_doc_carga_verif on (LN_familias.cliente = LN_tipos_doc_carga_verif.cliente and LN_set_tipo_doc.tipo_doc = LN_tipos_doc_carga_verif.tipo_doc  and LN_tipos_doc_carga_verif.familia = LN_familias.familia)

  where LN_contraparte_familias.contraparte = @p_contraparte
  and LN_contraparte_familias.activo = 1
  and LN_familias.visible = 1
  and LN_set_tipo_doc.activo = 1
  -- esto es nuevo desde aca
  union
  select LN_set_tipo_doc.tipo_doc, null as quien_carga,LN_set_tipo_doc.set_doc
  from LN_set_tipo_doc 
  inner join LN_CONTRAPARTE_SUB_SET on (LN_set_tipo_doc.set_doc = LN_CONTRAPARTE_SUB_SET.set_doc and LN_CONTRAPARTE_SUB_SET.activo = 1)
  where LN_CONTRAPARTE_SUB_SET.contraparte = @p_contraparte
  -- esto es nuevo hasta aca
  group by LN_set_tipo_doc.tipo_doc, LN_set_tipo_doc.set_doc


/* group by LN_set_tipo_doc.tipo_doc, LN_tipos_doc_carga_verif.quien_carga*/
/*AGB AGB*/
  OPEN TiposDoc

  FETCH NEXT FROM TiposDoc INTO @tipo_doc, @quien_carga,@set_doc

  WHILE @@FETCH_STATUS = 0 BEGIN

   /* Guardo una lista de los tipo_doc que deben quedar en el legajo */
   if (@tipos_doc_str is null)
    set @tipos_doc_str = convert(varchar,@tipo_doc)
   else
    set @tipos_doc_str = @tipos_doc_str + ',' + convert(varchar,@tipo_doc)

   /* traigo la configuración de cada tipo de documento que debe componer el legajo */

   select
    @modalidad = modalidad,
    @tipo_vigencia = tipo_vigencia,
    @dia_vigencia = dia_vigencia,
    @mes_vigencia = mes_vigencia,
    @vigencia = vigencia,
    @es_balance = ISNULL(es_balance, 0),
    @es_manif_bienes = ISNULL(es_manif_bienes, 0)
   from LN_tipos_doc 
   where tipo_doc = @tipo_doc


   IF (@es_balance = 0) BEGIN

    IF (@modalidad = 'V') BEGIN
     /* Evaluación de documentos de modalidad VENCIDA */

     SET @limite_vigencia = CASE
      WHEN @tipo_vigencia = 'M' THEN dateadd(second,-1, dateadd(day,1, convert(datetime,eomonth(dateadd(month,-1,getdate())) )))
      WHEN @tipo_vigencia = 'E' THEN dateadd(second,-1, dateadd(day,1, convert(datetime, convert(date, getdate())) ))
      WHEN @tipo_vigencia = 'B' THEN dateadd(second,-1, dateadd(day,1, iif(month(getdate()) % 2 = 0, convert(datetime,eomonth(dateadd(month,-2,getdate()))) , convert(datetime,eomonth(dateadd(month,-1,getdate()))) ) ))
      WHEN @tipo_vigencia = 'T' THEN dateadd(second,-1, dateadd(day,1, convert(datetime, eomonth(dateadd(month,(-1)*iif(month(getdate())%3 = 0, 3, month(getdate())%3), getdate())) ) ))
      WHEN @tipo_vigencia = 'C' THEN dateadd(second,-1, dateadd(day,1, convert(datetime, eomonth(dateadd(month,(-1)*iif(month(getdate())%4 = 0, 4, month(getdate())%4), getdate())) ) ))
      WHEN @tipo_vigencia = 'S' THEN dateadd(second,-1, dateadd(day,1, convert(datetime, eomonth(dateadd(month,(-1)*iif(month(getdate())%6 = 0, 6, month(getdate())%6), getdate())) ) ))
      WHEN @tipo_vigencia = 'A' THEN DATETIMEFROMPARTS(year(dateadd(year,-1,getdate())),12,31,23,59,59,0)
      WHEN @tipo_vigencia = 'D' THEN iif(convert(date,getdate()) <= datefromparts(year(getdate()),month(getdate()),@dia_vigencia), datetimefromparts(year(dateadd(month,-1,getdate())),month(dateadd(month,-1,getdate())),@dia_vigencia,23,59,59,0), datetimefromparts(year(getdate()),month(getdate()),@dia_vigencia,23,59,59,0))
      WHEN @tipo_vigencia = 'F' THEN iif(datefromparts(Year(getdate()),@mes_vigencia,@dia_vigencia) <= convert(date,getdate()), datetimefromparts(Year(getdate()),@mes_vigencia,@dia_vigencia,23,59,59,0), datetimefromparts(Year(dateadd(year,-1,getdate())),@mes_vigencia,@dia_vigencia,23,59,59,0) ) 
      WHEN @tipo_vigencia = 'N' THEN datetimefromparts(2099,12,31,23,59,59,0)
     END

    END ELSE BEGIN

     IF (@modalidad = 'A') BEGIN
      /* Evaluación de documentos de modalidad ADELANTADA */
     
      SET @limite_vigencia = CASE
       WHEN @tipo_vigencia = 'M' THEN dateadd(second,-1, dateadd(day,1, convert(datetime,eomonth(getdate()) ))) 
       WHEN @tipo_vigencia = 'E' THEN dateadd(second,-1, dateadd(day,1, convert(datetime, convert(date, getdate())) ))
       WHEN @tipo_vigencia = 'B' THEN dateadd(second,-1, dateadd(day,1, iif(month(getdate()) % 2 = 0, convert(datetime,eomonth(getdate())) , convert(datetime,eomonth(dateadd(month, 1,getdate()))) ) ))
       WHEN @tipo_vigencia = 'T' THEN dateadd(second,-1, dateadd(day,1, convert(datetime, eomonth(dateadd(month, iif(month(getdate())%3 = 0, 0, 3-month(getdate())%3), getdate())) ) ))
       WHEN @tipo_vigencia = 'C' THEN dateadd(second,-1, dateadd(day,1, convert(datetime, eomonth(dateadd(month, iif(month(getdate())%4 = 0, 0, 4-month(getdate())%4), getdate())) ) ))
       WHEN @tipo_vigencia = 'S' THEN dateadd(second,-1, dateadd(day,1, convert(datetime, eomonth(dateadd(month, iif(month(getdate())%6 = 0, 0, 6-month(getdate())%6), getdate())) ) ))
       WHEN @tipo_vigencia = 'A' THEN DATETIMEFROMPARTS(year(getdate()),12,31,23,59,59,0)
       WHEN @tipo_vigencia = 'D' THEN iif(convert(date,getdate()) <= datefromparts(year(getdate()),month(getdate()),@dia_vigencia), datetimefromparts(year(getdate()),month(getdate()),@dia_vigencia,23,59,59,0), datetimefromparts( year(dateadd(month,1,getdate())),month(dateadd(month,1,getdate())),@dia_vigencia,23,59,59,0))
       WHEN @tipo_vigencia = 'F' THEN iif(datefromparts(Year(getdate()),@mes_vigencia,@dia_vigencia) < convert(date,getdate()), datetimefromparts(Year(dateadd(year,1,getdate())),@mes_vigencia,@dia_vigencia,23,59,59,0), datetimefromparts(Year(getdate()),@mes_vigencia,@dia_vigencia,23,59,59,0) ) 
       WHEN @tipo_vigencia = 'N' THEN datetimefromparts(2099,12,31,23,59,59,0)
      END

     END

    END

    IF (@limite_vigencia > datetimefromparts(1900,1,1,0,0,0,0)) BEGIN

     DECLARE @tolerancia_carga tinyint

     
     if (@carga_inicial = 1)

      set @tolerancia_carga = @dias_tolerancia_inicial

     else

      /* La tolerancia de carga es el mínimo valor de la configuración entre todos los productos
       que le corresponden al cliente-contraparte que requieran dicho documento */



      /* Por set de documentos */

      select @tolerancia_carga = MIN(LN_set_tipo_doc.tolerancia_carga) 
      from LN_contraparte_familias
      inner join LN_contrapartes on LN_contraparte_familias.contraparte = LN_contrapartes.contraparte
      inner join LN_familias on (LN_contraparte_familias.familia = LN_familias.familia
            and LN_contrapartes.cliente = LN_familias.cliente)
      inner join LN_set_tipo_doc on LN_familias.set_doc = LN_set_tipo_doc.set_doc
      inner join LN_familia_productos on LN_contraparte_familias.familia = LN_familia_productos.familia
      inner join LN_productos on LN_familia_productos.producto = LN_productos.producto
      inner join LN_cliente_productos on 
       (LN_familia_productos.producto = LN_cliente_productos.producto
        and LN_contrapartes.cliente = LN_cliente_productos.cliente)
      where LN_contraparte_familias.contraparte = @p_contraparte      
      and LN_contraparte_familias.activo = 1
      and LN_cliente_productos.activo = 1
      and LN_familias.visible = 1
      and LN_familia_productos.activo = 1
      and LN_productos.visible = 1
      and LN_productos.documentos = 1
      group by LN_set_tipo_doc.tipo_doc




     DECLARE @vencimiento_carga DATETIME = dateadd(second,-1, dateadd(day,1, CONVERT(DATETIME, DATEADD(DAY, @tolerancia_carga, CONVERT(date, getdate()) )) ))
     DECLARE @cant_docs INT 

     IF (@tipo_vigencia <> 'E') BEGIN   
      SELECT @cant_docs = COUNT(*) FROM LN_docs
      WHERE contraparte = @p_contraparte
      AND gestion = @p_gestion
      AND tipo_doc = @tipo_doc
      AND (fecha_vigencia = @limite_vigencia or fecha_vigencia >= '2090-12-31')
      
                        AND ((estado_doc != 'X' and LN_docs.aplica = 1) or LN_docs.aplica = 0) 

/*select @limite_vigencia as OOOOOO,@tipo_vigencia as tipovigencia,@tipo_doc as tipodoc,@cant_docs as nnnn*/

      IF (@cant_docs = 0) BEGIN

       SELECT @nueva_version = ISNULL(MAX(doc_version), 0)+1
       FROM LN_docs
       WHERE contraparte = @p_contraparte
       AND tipo_doc = @tipo_doc 



       EXEC LN_docs_ 'INSERT', NULL, @cliente, @p_contraparte, @tipo_doc, @nueva_version, 'N', @vencimiento_carga, @limite_vigencia, 0, 0, NULL, NULL, NULL, NULL, @p_gestion, @p_user_id
      END
      

     END ELSE BEGIN

      /* Documentos de vigencia específica */
      DECLARE @pendientes int = 0
      DECLARE @generar tinyint = 0
      DECLARE @max_vigencia DATETIME = '1900-01-01 00:00:00'

      SELECT @pendientes = COUNT(*) FROM LN_docs
      WHERE contraparte = @p_contraparte
      AND gestion = @p_gestion
      AND tipo_doc = @tipo_doc
      AND fecha_vigencia IS NULL
      AND ((estado_doc != 'X' and LN_docs.aplica = 1) or LN_docs.aplica = 0) 

      IF (@pendientes = 0) BEGIN

       SELECT @max_vigencia = MAX(fecha_vigencia)
       FROM LN_docs
       WHERE contraparte = @p_contraparte
       AND tipo_doc = @tipo_doc
       AND fecha_vigencia is not null


       IF (@max_vigencia IS NULL) BEGIN
        SET @generar = 1
       END ELSE BEGIN
        IF (@max_vigencia < GETDATE()) begin
         SET @generar = 1
        end
       END

      END


     
      IF (@generar = 1) BEGIN

       SELECT @nueva_version = ISNULL(MAX(doc_version), 0)+1
       FROM LN_docs
       WHERE contraparte = @p_contraparte
       AND tipo_doc = @tipo_doc 

       EXEC LN_docs_ 'INSERT', NULL, @cliente, @p_contraparte, @tipo_doc, @nueva_version, 'N', @vencimiento_carga, NULL, 0, @es_balance, NULL, NULL, NULL, NULL, @p_gestion, @p_user_id
      END
     

     END

    END

   END ELSE BEGIN

    /* Documento balance */
    DECLARE @ultimo datetime
    DECLARE @test datetime
    DECLARE @meses int

    IF (@es_manif_bienes > 0) SET @bal_man = 'M' ELSE SET @bal_man = 'B'

    /* Si es manifestación de bienes, fuerzo periodicidad anual con cierre al 31/12 */
    IF (@bal_man = 'M' AND (@periodicidad_ejercicio IS NULL OR @fecha_ultimo_cierre IS NULL) ) BEGIN

     SET @periodicidad_ejercicio = 'A'
     SET @fecha_ultimo_cierre = DATETIMEFROMPARTS(Year(GETDATE())-1,12,31,0,0,0,0)

     UPDATE LN_contrapartes SET 
     fecha_ultimo_cierre = @fecha_ultimo_cierre,
     periodicidad_ejercicio = 'A'
     WHERE contraparte = @p_contraparte

    END

    IF (@fecha_ultimo_cierre IS NOT NULL AND @periodicidad_ejercicio IS NOT NULL) BEGIN

     SET @meses = 
     CASE 
      WHEN @periodicidad_ejercicio = 'A' THEN 12
      WHEN @periodicidad_ejercicio = 'S' THEN 6
      WHEN @periodicidad_ejercicio = 'E' THEN 18
      WHEN @periodicidad_ejercicio = 'B' THEN 24
      WHEN @periodicidad_ejercicio = 'T' THEN 3
      WHEN @periodicidad_ejercicio = 'C' THEN 4
     END
     
     SET @test = @fecha_ultimo_cierre

     IF (@fecha_ultimo_cierre < GETDATE()) BEGIN

      WHILE (@test < GETDATE()) BEGIN
       SET @ultimo = @test
       SET @test = DATEADD(MONTH, @meses, @test)
      END
     
     END ELSE BEGIN

      WHILE (@test > GETDATE()) BEGIN
       SET @ultimo = @test
       SET @test = DATEADD(MONTH, (-1) * @meses, @test)
      END

     END

     /* Al último balance exigible le doy un margen de 150 días luego de la fecha de cierre */
/* if ( DATEADD(DAY,150,@ultimo) > GETDATE() ) set @ultimo = DATEADD(MONTH,(-1)*@meses,@ultimo) */
     if ( DATEADD(DAY,90,@ultimo) > GETDATE() ) set @ultimo = DATEADD(MONTH,(-1)*@meses,@ultimo)
     

     /* Tengo la fecha real del último cierre EXIGIBLE anterior a la fecha de hoy */
      
     DECLARE @fd1 datetime 
     DECLARE @fh1 datetime 
     DECLARE @fd2 datetime 
     DECLARE @fh2 datetime 
     DECLARE @fd3 datetime 
     DECLARE @fh3 datetime = @ultimo

     IF (@periodicidad_ejercicio = 'A') BEGIN
      SET @fd3 = DATEADD(DAY, 1, DATEADD(YEAR, -1, @ultimo))
      SET @fh2 = DATEADD(YEAR, -1, @ultimo)
      SET @fd2 = DATEADD(DAY, 1, DATEADD(YEAR, -1, @fh2))
      SET @fh1 = DATEADD(YEAR, -1, @fh2)
      SET @fd1 = DATEADD(DAY, 1, DATEADD(YEAR, -1, @fh1))

     END ELSE

      IF (@periodicidad_ejercicio = 'S') BEGIN
       SET @fd3 = DATEADD(DAY, 1, EOMONTH(@ultimo, -6))
       SET @fh2 = EOMONTH(@ultimo, -6)
       SET @fd2 = DATEADD(DAY, 1, EOMONTH(@fh2, -6))
       SET @fh1 = EOMONTH(@fh2, -6)
       SET @fd1 = DATEADD(DAY, 1, EOMONTH(@fh1, -6))

      END ELSE

       IF (@periodicidad_ejercicio = 'E') BEGIN
        SET @fd3 = DATEADD(DAY, 1, EOMONTH(@ultimo, -18))
        SET @fh2 = EOMONTH(@ultimo, -18)
        SET @fd2 = DATEADD(DAY, 1, EOMONTH(@fh2, -18))
        SET @fh1 = EOMONTH(@fh2, -18)
        SET @fd1 = DATEADD(DAY, 1, EOMONTH(@fh1, -18))

       END ELSE

        IF (@periodicidad_ejercicio = 'B') BEGIN
         SET @fd3 = DATEADD(DAY, 1, DATEADD(YEAR, -2, @ultimo))
         SET @fh2 = DATEADD(YEAR, -2, @ultimo)
         SET @fd2 = DATEADD(DAY, 1, DATEADD(YEAR, -2, @fh2))
         SET @fh1 = DATEADD(YEAR, -2, @fh2)
         SET @fd1 = DATEADD(DAY, 1, DATEADD(YEAR, -2, @fh1))

        END ELSE

         IF (@periodicidad_ejercicio = 'T') BEGIN
          SET @fd3 = DATEADD(DAY, 1, EOMONTH(@ultimo, -3))
          SET @fh2 = EOMONTH(@ultimo, -3)
          SET @fd2 = DATEADD(DAY, 1, EOMONTH(@fh2, -3))
          SET @fh1 = EOMONTH(@fh2, -3)
          SET @fd1 = DATEADD(DAY, 1, EOMONTH(@fh1, -3))

         END ELSE

          IF (@periodicidad_ejercicio = 'C') BEGIN
           SET @fd3 = DATEADD(DAY, 1, EOMONTH(@ultimo, -4))
           SET @fh2 = EOMONTH(@ultimo, -4)
           SET @fd2 = DATEADD(DAY, 1, EOMONTH(@fh2, -4))
           SET @fh1 = EOMONTH(@fh2, -4)
           SET @fd1 = DATEADD(DAY, 1, EOMONTH(@fh1, -4))

          END



     /* Tengo las fechas inicio y fin de los últimos 3 ejercicios */
     if NOT EXISTS (select LN_docs.doc_id 
         from LN_docs 
         INNER JOIN LN_gestiones ON (LN_docs.contraparte = LN_gestiones.contraparte
                and LN_docs.gestion = LN_gestiones.gestion)         
         where LN_docs.contraparte = @p_contraparte
         and LN_docs.tipo_doc = @tipo_doc
         and (LN_docs.inicio_ejercicio = @fd1
          OR LN_docs.fin_ejercicio = @fh1)
         AND ((estado_doc != 'X' and LN_docs.aplica = 1) or LN_docs.aplica = 0) 
         AND LN_gestiones.desde <= GETDATE()
         AND LN_gestiones.hasta >= GETDATE()) begin

      SELECT @nueva_version = ISNULL(MAX(doc_version), 0)+1
      FROM LN_docs
      WHERE contraparte = @p_contraparte
      AND tipo_doc = @tipo_doc
      
      
      /**** CHANCHADA CHANCHADA CHANCHADA
       SI ES AMX Y TODAVIA NO TIENE GENERADOS BALANCES NO GENERO NADA ****/


      /* if NOT (@cliente = 5546348 AND NOT EXISTS (SELECT doc_id from LN_docs where contraparte = @p_contraparte and tipo_doc = @tipo_doc))*/ 

       EXEC LN_docs_ 'INSERT', NULL, @cliente, @p_contraparte, @tipo_doc, @nueva_version, 'N', @vencimiento_carga, @fh1, 0, 1, @fd1, @fh1, NULL, NULL, @p_gestion, @p_user_id

     end

     if NOT EXISTS (select LN_docs.doc_id 
         from LN_docs 
         INNER JOIN LN_gestiones ON (LN_docs.contraparte = LN_gestiones.contraparte
                and LN_docs.gestion = LN_gestiones.gestion)         
         where LN_docs.contraparte = @p_contraparte
         and LN_docs.tipo_doc = @tipo_doc
         and (LN_docs.inicio_ejercicio = @fd2
          OR LN_docs.fin_ejercicio = @fh2)
         AND ((estado_doc != 'X' and LN_docs.aplica = 1) or LN_docs.aplica = 0) 
         AND LN_gestiones.desde <= GETDATE()
         AND LN_gestiones.hasta >= GETDATE()) begin

      SELECT @nueva_version = ISNULL(MAX(doc_version), 0)+1
      FROM LN_docs
      WHERE contraparte = @p_contraparte
      AND tipo_doc = @tipo_doc 

      /**** CHANCHADA CHANCHADA CHANCHADA
       SI ES AMX Y TODAVIA NO TIENE GENERADOS BALANCES NO GENERO NADA ****/


      if NOT (@cliente = 5546348 AND NOT EXISTS (SELECT doc_id from LN_docs where contraparte = @p_contraparte and tipo_doc = @tipo_doc))
       EXEC LN_docs_ 'INSERT', NULL, @cliente, @p_contraparte, @tipo_doc, @nueva_version, 'N', @vencimiento_carga, @fh2, 0, 1, @fd2, @fh2, NULL, NULL, @p_gestion, @p_user_id

     end

     if NOT EXISTS (select LN_docs.doc_id 
         from LN_docs 
         INNER JOIN LN_gestiones ON (LN_docs.contraparte = LN_gestiones.contraparte
                and LN_docs.gestion = LN_gestiones.gestion)         
         where LN_docs.contraparte = @p_contraparte
         and LN_docs.tipo_doc = @tipo_doc
         and (LN_docs.inicio_ejercicio = @fd3
          OR LN_docs.fin_ejercicio = @fh3)
         AND ((estado_doc != 'X' and LN_docs.aplica = 1) or LN_docs.aplica = 0) 
         AND LN_gestiones.desde <= GETDATE()
         AND LN_gestiones.hasta >= GETDATE()) begin

      SELECT @nueva_version = ISNULL(MAX(doc_version), 0)+1
      FROM LN_docs
      WHERE contraparte = @p_contraparte
      AND tipo_doc = @tipo_doc 

      /**** CHANCHADA CHANCHADA CHANCHADA
       SI ES AMX Y TODAVIA NO TIENE GENERADOS BALANCES NO GENERO NADA ****/


      if NOT (@cliente = 5546348 AND NOT EXISTS (SELECT doc_id from LN_docs where contraparte = @p_contraparte and tipo_doc = @tipo_doc))
       EXEC LN_docs_ 'INSERT', NULL, @cliente, @p_contraparte, @tipo_doc, @nueva_version, 'N', @vencimiento_carga, @fh3, 0, 1, @fd3, @fh3, NULL, NULL, @p_gestion, @p_user_id

     end


 
    
     
    END
    ELSE BEGIN

     /* sI el documento balance lo carga Fidelitas genero los que hagan falta hasta 3 en la gestión */
     if (@quien_carga = 'F') begin
      
      declare @cant_balances int
      declare @maxvers int
      declare @cnt int = 0
      select @cant_balances = COUNT(*) from LN_docs where contraparte = @p_contraparte and gestion = @p_gestion and tipo_doc = @tipo_doc and estado_doc in ('N','I','R','V')
      select @maxvers = isnull(max(doc_version),0) from LN_docs where contraparte = @p_contraparte and gestion = @p_gestion and tipo_doc = @tipo_doc and estado_doc in ('N','I','R','V')

      while @cant_balances < 3 begin
       set @cnt = @cnt + 1 
       set @nueva_version = @maxvers + @cnt

       EXEC LN_docs_ 'INSERT', NULL, @cliente, @p_contraparte, @tipo_doc, @nueva_version, 'N', @vencimiento_carga, NULL, 0, 1, NULL, NULL, NULL, NULL, @p_gestion, @p_user_id

       set @cant_balances = @cant_balances + 1
      end

     end

    END

   END
      
   FETCH NEXT FROM TiposDoc INTO @tipo_doc, @quien_carga,@set_doc
  END

  CLOSE TiposDoc
  DEALLOCATE TiposDoc

  /* Marco como eliminados los tipos de documentos de la gestión de la contraparte
   que no deberían estar incluidos en el legajo */


  -- esto es nuevo desde aca
  if (@tipos_doc_str is null) begin
   UPDATE LN_docs SET /*estado_doc = 'X', */ aplica = 0
   WHERE contraparte = @p_contraparte
   AND gestion = @p_gestion
  end 
  -- esto es nuevo hasta aca
  if (@tipos_doc_str is not null) begin

   UPDATE LN_docs SET /*estado_doc = 'X', */ aplica = 0
   WHERE contraparte = @p_contraparte
   AND gestion = @p_gestion
   AND tipo_doc NOT IN 
    (SELECT TD.Item 
    FROM dbo.DelimitedSplit8K(@tipos_doc_str, ',') TD)

  end

 end


 
END

GO

Used By

No items found