IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'dbo.CP_Cbtes_Grabar_Numero') 
                   and OBJECTPROPERTY(id, N'IsProcedure') = 1 )
BEGIN
    DROP PROCEDURE dbo.CP_Cbtes_Grabar_Numero 
END
GO

CREATE  PROCEDURE dbo.CP_Cbtes_Grabar_Numero @pId_Trans INT
AS
SET NOCOUNT ON
--PRINT 'Procedimiento: CP_Cbtes_Grabar_Numero  Trans: '+ CAST(@pId_Trans AS VARCHAR(10))

DECLARE @Mensaje				VARCHAR(100)
		,@Id_Tipo_Cbte			CHAR(4)
		,@Fecha_Cai				DATETIME
		,@Nro_Cai				VARCHAR(14)
		,@Flag_Val_Correla		TINYINT
		,@Compromete_Factura	SMALLINT
		,@Fecha					DATETIME
		,@Fecha_Cbte			DATETIME
		,@Comprobante_Nro		INT
		,@Id_Estado_Cbte		SMALLINT
		,@Id_Cond_Pago			SMALLINT
		,@Compromete_Recibos	SMALLINT
		,@Compromete_Pagos		SMALLINT
		,@Id_Tipo_Cbte_Dest		CHAR(4)
		,@Fact_Cont_FN			INT
		,@Tipo_Cbte_Dest_Cant	INT
		,@Usar_Trans			TINYINT


--SET @Usar_Trans = ISNULL((SELECT 1 WHERE SERVERPROPERTY('ProductVersion') > '10.50.4000.0'),0)
IF @@TRANCOUNT > 0 SET @Usar_Trans = 0

--Usamos transacciones a partir del SQL 2012 en adelante

/*

8.0 	2000 	SQL Server 20007​ 		Shiloh
8.0 	2003 	SQL Server 2000			64-bit Edition 	Liberty
9.0 	2005 	SQL Server 20058​ 		Yukon
10.0 	2008 	SQL Server 20089​ 		Katmai
10.25 	2010 	SQL Azure DB 			CloudDatabase
10.50 	2010 	SQL Server 2008 R210​ 	Kilimanjaro
11.0 	2012 	SQL Server 201211​ 		Denali
12.0 	2015 	SQL Server 201412​ 		SQL14 (antes Hekaton)
13.0 	2016 	SQL Server 2016 		SQL16
14.0 	2017 	SQL Server 2017 		vNext 2017
15.0 	2019 	SQL Server 2019 		Seattle 


*/



						
BEGIN TRY
	IF @Usar_Trans = 1	BEGIN TRAN

	IF (NOT EXISTS (SELECT 1 FROM Cbtes WHERE Id_Trans = @pId_Trans))
	BEGIN
		SELECT	 1					AS ErrorNumber 
				,0					AS ErrorSeverity  
				,0					AS ErrorState 
				,0					AS ErrorProcedure  
				,@pId_Trans					AS ErrorLine		
				,'No Existe Cbte de Origen'			AS ErrorMessage
		IF @Usar_Trans = 1 AND @@TRANCOUNT > 0	ROLLBACK
		RETURN 9999
    END

	SET @Id_Tipo_Cbte_Dest = (SELECT C.Id_Tipo_Cbte FROM Cbtes C WHERE C.Id_Trans = @pId_Trans)
	SET @Id_Tipo_Cbte_Dest =  dbo.CF_Cbte_Traer_Tipo_Dest(@Id_Tipo_Cbte_Dest)
	SET @Tipo_Cbte_Dest_Cant = ISNULL((SELECT COUNT(*) FROM Cbtes_Tipos WHERE Id_Tipo_Cbte_Dest = @Id_Tipo_Cbte_Dest),0)


	SET @Fact_Cont_FN = CAST( dbo.CF_xParam('Fact_Cont_FN') AS INT )


	SELECT @Id_Tipo_Cbte = ISNULL(T.Id_Tipo_Cbte,'')
			, @Fecha_Cai = T.Fecha_Cai
			, @Nro_Cai = T.Nro_Cai
			, @Flag_Val_Correla = ISNULL(T.Flag_Val_Correla,0)
			, @Compromete_Factura = ISNULL(T.Compromete_Factura,0)
			, @Id_Estado_Cbte = ISNULL(T.Id_Estado_Cbte,0)
			, @Id_Cond_Pago = ISNULL(C.Id_Cond_Pago,0)
			, @Compromete_Recibos = ISNULL(Compromete_Recibos,0)
			, @Compromete_Pagos	= ISNULL(Compromete_Pagos,0)
			, @Fecha_Cbte = C.Fecha
			, @Comprobante_Nro = ISNULL(T.Prox_Nro,1)
			FROM Cbtes_Tipos T, Cbtes C
			WHERE T.Id_Tipo_Cbte = @Id_Tipo_Cbte_Dest
			AND C.Id_Trans = @pId_Trans

    IF @Flag_Val_Correla = 1 OR (@Compromete_Factura <> 0 AND @Fact_Cont_FN <> 0 )
	BEGIN
	   IF @Tipo_Cbte_Dest_Cant = 0
		   SELECT @Fecha = MAX(Fecha),@Comprobante_Nro = ISNULL(MAX(Comprobante_Nro),0) + 1 
				FROM Cbtes 
				WHERE Id_Tipo_Cbte = @Id_Tipo_Cbte_Dest AND NOT (Id_Estado_Cbte = 3 AND Comprobante_Nro = 0)

	   ELSE
		   SELECT @Fecha = MAX(Fecha),@Comprobante_Nro = ISNULL(MAX(Comprobante_Nro),0) + 1 
				FROM Cbtes 
				WHERE (Id_Tipo_Cbte = @Id_Tipo_Cbte 
					OR Id_Tipo_Cbte  IN (SELECT Id_Tipo_Cbte FROM Cbtes_Tipos WHERE Id_Tipo_Cbte_Dest = @Id_Tipo_Cbte)) --para destino y todos los cbtes que dependen del destino
					AND NOT (Id_Estado_Cbte = 3 AND Comprobante_Nro = 0)

	   SET @Fecha = ISNULL(@Fecha,GETDATE())
	   SET @Comprobante_Nro = ISNULL(@Comprobante_Nro,1)
	   IF @Fecha > @Fecha_Cbte
			SET @Fecha_Cbte = @Fecha
	END

	IF @Id_Estado_Cbte = 0  --si no tenia valor por defecto
	BEGIN
		SET @Id_Estado_Cbte = 1  --Pendiente
		IF (@Compromete_Factura <> 0 AND @Id_Cond_Pago = 1 ) OR @Compromete_Recibos <> 0 OR @Compromete_Pagos <> 0
			SET @Id_Estado_Cbte = 2	 --Completo
	END


	UPDATE Cbtes SET Comprobante_Nro = @Comprobante_Nro 
						,Fecha = @Fecha_Cbte
						,Id_Estado_Cbte = @Id_Estado_Cbte
						,Cai_Vence  = @Fecha_Cai
						,Cai = @Nro_Cai
						,Nro_Auto_Trib = @Nro_Cai
						 WHERE Id_Trans = @pId_Trans
	UPDATE Cbtes_Tipos SET Fecha_Ult = @Fecha_Cbte, Prox_Nro = @Comprobante_Nro + 1
			WHERE Id_Tipo_Cbte = @Id_Tipo_Cbte 
					OR Id_Tipo_Cbte  IN (SELECT Id_Tipo_Cbte FROM Cbtes_Tipos 
					WHERE Id_Tipo_Cbte_Dest = @Id_Tipo_Cbte) --para destino y todos los cbtes que dependen del destino

	IF @Usar_Trans = 1 AND @@TRANCOUNT > 0	COMMIT
	SELECT	 0					AS ErrorNumber 
			,0					AS ErrorSeverity  
			,0					AS ErrorState 
			,0					AS ErrorProcedure  
			,@Comprobante_Nro	AS ErrorLine		
			,@Mensaje			AS ErrorMessage


END TRY  


BEGIN CATCH  
    EXECUTE usp_GetErrorInfo
	IF @Usar_Trans = 1 AND @@TRANCOUNT > 0	ROLLBACK
	RETURN 9999
END CATCH;   

--PRINT 'FIN Procedimiento: CP_Cbtes_Grabar_Numero  Trans: '+ CAST(@pId_Trans AS VARCHAR(10))
RETURN 0

