IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'[dbo].[CF_Cbte_Saldo]') 
                   and [type] = 'FN')
BEGIN
    DROP FUNCTION dbo.CF_Cbte_Saldo
END
GO

CREATE FUNCTION [dbo].[CF_Cbte_Saldo](@trans INT,@fecha datetime) 
RETURNS DECIMAL(16,2)
AS
BEGIN
DECLARE @Retorno DECIMAL(17,5)
		,@FechaCbte datetime
		,@Compromete_Factura SMALLINT
		,@Compromete_Recibos SMALLINT


SELECT @fechacbte = C.fecha , @Compromete_Factura = T.Compromete_Factura ,@Compromete_Recibos = T.Compromete_Recibos
					FROM Cbtes C, Cbtes_Tipos T 
					WHERE C.Id_Trans = @trans 
						AND T.Id_Tipo_Cbte = C.Id_Tipo_Cbte

if @fecha < @fechacbte 
   RETURN 0

set @Retorno = 0

IF @Compromete_Factura = 1
BEGIN
	SET @Retorno = isnull(
							(
								SELECT SUM(ISNULL(A.importe,0)) 
									FROM Cbtes_Aplica A, Cbtes D , Cbtes_tipos T
									WHERE A.Id_Trans = @trans AND A.id_trans_D = D.Id_trans
										AND d.id_estado_cbte in (1,2,4)
										AND D.Id_Tipo_Cbte = t.Id_Tipo_Cbte
										AND (T.Compromete_Recibos in (1,-1) OR T.compromete_factura = -1)
										AND D.Fecha < @Fecha + 1
							)
					   ,0)
END     
ELSE 
BEGIN
	IF @Compromete_Factura = -1
	BEGIN
		SET @Retorno = isnull(
								(
									SELECT SUM(ISNULL(A.importe,0)) 
										FROM Cbtes_Aplica A, Cbtes O , Cbtes_tipos T
										WHERE A.Id_Trans_D = @trans AND A.id_trans = O.Id_trans
											AND o.id_estado_cbte in (1,2,4)
											AND o.Id_Tipo_Cbte = t.Id_Tipo_Cbte
											AND o.fecha < @fecha + 1
											AND T.Compromete_Factura in (1,-1)
								)
						   ,0)

		SET @Retorno = @Retorno + isnull(
								(
									SELECT SUM(ISNULL(A.importe,0)) 
										FROM Cbtes_Aplica A, Cbtes D , Cbtes_tipos T
										where A.Id_Trans = @trans AND A.id_trans_D = D.Id_trans
											and D.id_estado_cbte in (1,2,4)
											and D.Id_Tipo_Cbte = t.Id_Tipo_Cbte
											and T.Compromete_Recibos in (1,-1) 
											AND D.Fecha < @Fecha + 1
								) * -1
						   ,0)
                  
	END
END

IF @Compromete_Recibos IN (1,-1)
BEGIN
	SET @Retorno = isnull(
							(
									SELECT SUM(ISNULL(A.importe,0)) 
										FROM Cbtes_Aplica A, Cbtes O , Cbtes_tipos T
										WHERE A.Id_Trans_D = @trans AND A.id_trans = O.Id_trans
											AND o.id_estado_cbte in (1,2,4)
											AND o.Id_Tipo_Cbte = t.Id_Tipo_Cbte
											AND o.fecha < @fecha + 1
											AND T.Compromete_Factura in (1,-1)
							)
					   ,0)
END


set @Retorno =  (SELECT Imp_Total FROM Cbtes WHERE Id_Trans = @trans )- @Retorno
     
RETURN @Retorno
END
   

                        
                   
