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



CREATE PROCEDURE [dbo].[CP_Cajas_Saldos] @pid_periodo_Caja  Int
 
AS 
BEGIN
SET NOCOUNT ON

declare @Id_Periodo_Caja INT
,@Descripcion char(200)
,@Saldo decimal(14,2)
,@Egresos  decimal(14,2)
,@Id_tipo_Val Char(3) 
  
  
       SELECT P.Id_Periodo_Caja as id_periodo_caja,CA.DESCRIPCION as descripcion,V.id_tipo_val,SUM(V.Importe) AS saldo Into #CAJAS_SALDOS
                 FROM VALORES V,Cajas_Mov C,CBTES CB, CBTES_TIPOS T, Cajas_periodos P, cajas CA
                 WHERE C.Id_Trans = V.Id_Trans 
                 AND CB.ID_TRANS = C.ID_TRANS 
				 AND CA.Id_Caja = P.id_caja and P.Id_Estado_Caja = 1
                 AND CB.ID_TIPO_CBTE = T.ID_TIPO_CBTE 
                 AND T.COMPROMETE_BANKING NOT IN (1,-1) 
                 AND C.Id_Periodo_Caja = V.Id_Periodo_Caja 
                 AND C.Id_Tipo_Mov_Caja IN (1,7,11,10,5)
                 AND C.Id_Estado_Mov_Caja = 2
                 AND C.Id_Periodo_Caja = P.Id_Periodo_Caja
                 AND C.Importe > 0  
                 AND v.id_estado_valor <> 1
                 GROUP BY P.Id_Periodo_Caja,CA.DESCRIPCION,V.Id_Tipo_Val
       

		DECLARE Cur_Caja CURSOR FOR
			 SELECT Id_Periodo_Caja,Descripcion,Id_tipo_Val,Saldo FROM #CAJAS_SALDOS

		OPEN Cur_Caja 
		FETCH NEXT FROM Cur_Caja INTO @Id_Periodo_Caja,@Descripcion,@Id_tipo_Val,@Saldo
		WHILE @@FETCH_STATUS=0
		BEGIN

            set @Egresos = ISNULL(( SELECT SUM(V.Importe)
                 FROM VALORES V,Cajas_Mov C,CBTES CB, CBTES_TIPOS T 
                 WHERE C.Id_Trans = V.Id_Trans 
                 AND CB.ID_TRANS = C.ID_TRANS 
                 AND CB.ID_TIPO_CBTE = T.ID_TIPO_CBTE 
                 AND T.COMPROMETE_BANKING NOT IN (1,-1) 
                 AND C.Id_Periodo_Caja = V.Id_Periodo_Caja 
                 AND C.Id_Tipo_Mov_Caja IN (2,3,6,8,15,4)
                 AND C.Id_Estado_Mov_Caja = 2
                 AND C.Id_Periodo_Caja  = @Id_Periodo_Caja
                 AND C.Importe < 0  
                 AND V.Id_Tipo_Val = @Id_tipo_Val
                 AND v.id_estado_valor <> 1
                 ),0)

			UPDATE #CAJAS_SALDOS SET Saldo = Saldo - @Egresos  WHERE Id_Periodo_Caja = @Id_Periodo_Caja and Id_tipo_Val = @Id_tipo_Val

			FETCH NEXT FROM Cur_Caja INTO @Id_Periodo_Caja,@Descripcion,@Id_tipo_Val,@Saldo
		END
		CLOSE Cur_Caja
		DEALLOCATE Cur_Caja
	

        IF @pid_periodo_Caja = 0
		   BEGIN
		     Select * from #CAJAS_SALDOS  order by Id_Periodo_Caja
		   END
		 ELSE
		   BEGIN
		     Select * from #CAJAS_SALDOS  WHERE Id_Periodo_Caja = @pid_periodo_Caja
		   END

		Drop table #CAJAS_SALDOS

END

-- SP_Cajas_Saldos 176
