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 147088, 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_AGB_VRM_NO_TOCAR
-- 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
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
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
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)
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
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
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)
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 */
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
GO
/*
EXEC LN_actualizar_legajo_AGB 147088, 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_AGB_VRM_NO_TOCAR
-- 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
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
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
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)
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
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
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)
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 */
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
Depends On
14Used By
No items found