SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

IF EXISTS (SELECT * FROM sys.objects 
   WHERE object_id = OBJECT_ID(N'WINV_SaldoContab_GetInfo') )
DROP Function WINV_SaldoContab_GetInfo
GO

Create Function WINV_SaldoContab_GetInfo
             ( @Id_Cuenta INT)
             
Returns @Temp_SaldoContab 
        Table( Id_Cuenta INT,
               Cuenta    NVARCHAR(50),
		   	   Cto_Gto   NVARCHAR(20),
               Tit_Cta   NVARCHAR(255),
               Importe_Contab  NUMERIC(15,2))
As

/* =============================================
	Date: Mar 18,2016
	Obtener saldo de la cuenta 
	en contabilidad, Cuenta de Inventario
   =============================================
*/

Begin

--Declare @Idcuenta INT
--Set @Idcuenta = 78312

Declare @TempSaldoOut
      Table( Id_Cuenta INT,
             Cuenta    NVARCHAR(50),
			 Cto_Gto   NVARCHAR(20),
             Tit_Cta   NVARCHAR(255),
             Importe_Contab  NUMERIC(15,2))

	Declare @Id_Ejercicio int,
			@Fecha Datetime

	Select @Fecha = fecha_dia 
		From stoktabl

	Select @Id_Ejercicio = Ejercicio 
	   From Vst_Ejercicio
	   Where Datediff(day,@Fecha ,desde) <= 0  
		 and DateDiff(Day,@Fecha,hasta)  >= 0
		 
	-- Fran: Este enfoque no sirve, ya que pueden haber asientos pendientes pero ninguno integrado aún.

	--Insert into @Temp_SaldoContab
	--Select id_cuenta = coalesce(min(a.id_cuenta),0),
	--	   Cuenta    = Coalesce(min(a.Cuenta),''),
	--	   Cto_Gto   = Coalesce(min(a.Cto_Gto),''),
	--	   Tit_Cta   = Coalesce(min(a.tit_cta),''),
	--	   Importe_Contab = Coalesce( 
	--		  (Sum(a.debe)-Sum(a.haber))  
	--		  + 
	--		  (Select Sum(debe)-Sum(haber) 
	--			  From VContAsie b
	--			  Where id_cuenta = @Id_Cuenta
	--			  and ejercicio = @Id_Ejercicio),0.00)
	--   From VContDiar a
	--   Where a.id_cuenta = @Id_Cuenta
	--	 and a.ejercicio = @Id_Ejercicio
	--GROUP BY a.id_cuenta
	
	-- Mayorizado
	Insert into @TempSaldoOut
	Select id_cuenta = coalesce(min(a.id_cuenta),0),
		   Cuenta    = Coalesce(min(a.Cuenta),''),
		   Cto_Gto   = Coalesce(min(a.Cto_Gto),''),
		   Tit_Cta   = Coalesce(min(a.tit_cta),''),
		   Importe_Contab = Coalesce( 
			  (Sum(a.debe)-Sum(a.haber)),0.00)
	   From VContDiar a
	   Where a.id_cuenta = @Id_Cuenta
		 and a.ejercicio = @Id_Ejercicio
	GROUP BY a.id_cuenta
	
	-- Pendiente
	Insert into @TempSaldoOut
	Select id_cuenta = coalesce(min(a.id_cuenta),0),
		   Cuenta    = Coalesce(min(a.Cuenta),''),
		   Cto_Gto   = Coalesce(min(a.Cto_Gto),''),
		   Tit_Cta   = Coalesce(min(a.tit_cta),''),
		   Importe_Contab = Coalesce( 
			  (Sum(a.debe)-Sum(a.haber)),0.00)
	   From VContAsie a
	   Where a.id_cuenta = @Id_Cuenta
		 and a.ejercicio = @Id_Ejercicio
	GROUP BY a.id_cuenta
	
	-- Total
	Insert into @Temp_SaldoContab
	Select id_cuenta = coalesce(min(a.id_cuenta),0),
		   Cuenta    = Coalesce(min(a.Cuenta),''),
		   Cto_Gto   = Coalesce(min(a.Cto_Gto),''),
		   Tit_Cta   = Coalesce(min(a.Tit_Cta),''),
		   Importe_Contab = Coalesce(Sum(a.Importe_Contab),0.00)
	   From @TempSaldoOut a
	GROUP BY a.id_cuenta
	
	-- Fran: Para que jale algo si no hay nada y así no se coma la fila cuando no hay movimientos el CROSS APPLY
	IF NOT EXISTS (SELECT id_cuenta FROM @Temp_SaldoContab)
	BEGIN
		Insert into @Temp_SaldoContab
		Select id_cuenta = coalesce(min(a.id_cuenta),0),
			   Cuenta    = Coalesce(min(a.Cuenta),''),
			   Cto_Gto   = Coalesce(min(a.Cto_Gto),''),
			   Tit_Cta   = Coalesce(min(a.Tit_Cta),''),
			   Importe_Contab = 0.00
		   From STOKCTACTO a WHERE a.id_cuenta = @Id_Cuenta
	END 

	--If @@ROWCOUNT = 0 
	--Begin
	--  	Insert into @Temp_SaldoContab
	--	  Values(@Id_Cuenta,'','','',0)

	--End

	   
  Return

End
