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

CREATE PROCEDURE [dbo].[CP_Finan_Creditos](
				@pAmort			CHAR(1)
			,	@pCuotas		SMALLINT
			,	@pTEM			DECIMAL(12,4)
			,	@pCapital		DECIMAL(12,4)
			,	@pFechaDesde	DATETIME
			,	@pNroCutoa		SMALLINT
			,   @Id_Cta_Banco    INT
			,   @Pid_Cliente     INT
			)
AS
 
IF  @pAmort NOT IN ('T','F','A','U')
    RETURN

DECLARE @NroCuota SMALLINT
      , @SaldoInicial	DECIMAL(16,2)
	  , @ValorCuota		DECIMAL(16,2)
	  , @Intereses		DECIMAL(16,2)
	  , @Amortizacion	DECIMAL(16,2) 
	  , @AmortACum		DECIMAL(16,2) 
	  , @SaldoFinal		DECIMAL(16,2)
	  , @Fecha			DATETIME
	  , @DifDias	    TINYINT
	  , @Fecha_Pago     DATETIME
	  , @Id_Cliente			INT
	  , @Razon_Social		VARCHAR(100)
	  , @Id_Cliente_Externo	VARCHAR(14)
	  , @Cuenta_Nro			VARCHAR(50)
	  , @Cuenta_Descrip		VARCHAR(100)
	  , @Imp_Seguro         DECIMAL(16,2)
	  , @Imp_Gastos         DECIMAL(16,2)
	  , @Imp_Final_Cuota    DECIMAL(16,2)
	  , @Iva_Intereses      DECIMAL(16,2)
	  , @Id_Producto_Seg    VARCHAR(14)
	  


CREATE TABLE #Result (
	    Fecha				DATETIME
      , NroCuota			SMALLINT 
      , SaldoInicial		DECIMAL(16,2)
	  , ValorCuota			DECIMAL(16,2)
	  , Intereses			DECIMAL(16,2)
	  , Amortizacion		DECIMAL(16,2) 
	  , AmortACum			DECIMAL(16,2) 
	  , SaldoFinal			DECIMAL(16,2)
	  , FechaPago			DATETIME
	  , Id_Cliente			INT
	  , Razon_Social		VARCHAR(100)
	  , Id_Cliente_Externo	VARCHAR(14)
	  , Id_Cta_Banco		SMALLINT
	  , Cuenta_Nro			VARCHAR(50)
	  , Cuenta_Descrip		VARCHAR(100)
	  , Imp_Seguro          DECIMAL(16,2)
	  , Imp_Gastos          DECIMAL(16,2)
	  , Imp_Final_Cuota     DECIMAL(16,2)
	  )

SET @NroCuota = 1
SET @SaldoInicial	= @pCapital
SET @AmortACum = 0
SET @Fecha = @pFechaDesde
SET @Fecha_Pago = NULL

SELECT @Id_Cliente = ISNULL(B.Id_Cliente,0)
	, @Razon_Social = C.Razon_Social 
	, @Id_Cliente_Externo = C.Id_Cliente_Externo
	, @Cuenta_Nro = B.Cuenta_Nro
	, @Cuenta_Descrip = B.Descripcion
	FROM Bancos_Ctas B, Clientes C
	WHERE B.Id_Cliente = C.Id_Cliente
		AND B.Id_Cta_Banco = @Id_Cta_Banco

IF ISNULL(@Id_Cliente,0) = 0 
   BEGIN
     SET @Id_Cliente = @pId_Cliente 
   END


SELECT @IVA_INTERESES = ISNULL(1+(I.PORC1/100),0) FROM PRODUCTOS P, Productos_TasaIva I
    WHERE P.ID_PRODUCTO =  (select Valor_String from xParametros where setDatos= 1 and idParametro ='Prod_Gastos_Prest')
	      AND P.ID_IVA = I.Id_Iva

SELECT @Id_Producto_Seg = (select Valor_String from xParametros where setDatos= 1 and idParametro ='Prod_Seg_Prestamos')

      
/*Cuota Cero*/
SET @DifDias = DATEDIFF(dd,@Fecha,(Select dbo.SF_EOMONTH(@Fecha)))
IF ISNULL(@DifDias,0) != 0
BEGIN
		SET @Intereses		= @pCapital * (@pTEM / 100 / 30) * @DifDias
		SET @Amortizacion	= 0
		SET @ValorCuota		= @Intereses + @Amortizacion
		SET @AmortACum		= 0
		SET @SaldoFinal		= @pCapital 
	    SET @Imp_Seguro      = 0
	    SET @Imp_Gastos      = 0
	    SET @Imp_Final_Cuota = @ValorCuota + @Imp_Seguro + @Imp_Gastos

		INSERT INTO #Result VALUES (@Fecha,0 , @SaldoInicial, @ValorCuota, @Intereses, @Amortizacion, @AmortACum, @SaldoFinal,@Fecha_Pago
		             ,@Id_Cliente,@Razon_Social,@Id_Cliente_Externo,@Id_Cta_Banco,@Cuenta_Nro,@Cuenta_Descrip,@Imp_Seguro,@Imp_Gastos,@Imp_Final_Cuota )
END 

SET @Fecha = (Select dbo.SF_EOMONTH(@Fecha))
SET @Fecha = DATEADD(dd,1,@Fecha) 

WHILE @NroCuota <= @pCuotas
BEGIN
    IF UPPER(@pAmort) = 'T'   -- Tasa directa
	BEGIN
		SET @Intereses		= @pCapital * @pTEM / 100
		SET @Amortizacion	= @pCapital / @pCuotas
		SET @ValorCuota		= @Intereses + @Amortizacion
		SET @AmortACum		= @AmortACum + @Amortizacion
		SET @SaldoFinal		= @pCapital - @AmortACum
    END

    IF UPPER(@pAmort) = 'F'   -- Frances
	BEGIN
		SET @ValorCuota		= @pCapital * ( @pTEM / 100) / (1 -(POWER( (1+( @pTEM / 100)),(@pCuotas * -1) ) ) )   
		SET @Intereses		= @SaldoInicial * @pTEM / 100
		SET @Amortizacion	= @ValorCuota - @Intereses
		SET @AmortACum		= @AmortACum + @Amortizacion
		SET @SaldoFinal		= @pCapital - @AmortACum
    END

    IF UPPER(@pAmort) = 'A'   -- Aleman
	BEGIN
		SET @ValorCuota		= (@pCapital / @pCuotas) + ( @SaldoInicial * ( @pTEM / 100) )
		SET @Intereses		= @SaldoInicial * @pTEM / 100
		SET @Amortizacion	= @pCapital / @pCuotas
		SET @AmortACum		= @AmortACum + @Amortizacion
		SET @SaldoFinal		= @pCapital - @AmortACum
    END

    IF UPPER(@pAmort) = 'U'   -- Americano
	BEGIN
		SET @Intereses		= @pCapital * @pTEM / 100
		IF @NroCuota = @pCuotas
			SET @Amortizacion	= @pCapital  
		ELSE 
			SET @Amortizacion	= 0 
		SET @ValorCuota		= @Intereses + @Amortizacion
		SET @AmortACum		= @AmortACum + @Amortizacion
		SET @SaldoFinal		= @pCapital - @AmortACum

    END
	IF @Id_Cta_Banco > 0
	   BEGIN
		 SET @Fecha_Pago = (Select Max(ISNULL(R.FECHA,'')) From Cbtes_Items i, Cbtes C , CBTES_TIPOS T,CBTES_APLICA A, CBTES R 
						   Where C.Id_Trans = I.Id_Trans 
						   AND A.ID_TRANS = C.ID_TRANS 
						   AND A.ID_TRANS_D = R.ID_TRANS
						   And C.Id_Estado_Cbte = 2 and I.Id_Producto = 'AMORTIZA'
						   AND DATEPART(MM,I.Fecha_QA) = DATEPART(MM,@Fecha) 
						   AND DATEPART(YYYY,I.Fecha_QA) = DATEPART(YYYY,@Fecha) 
						   And C.Id_tipo_Cbte = T.Id_Tipo_cbte And T.Compromete_Factura = 1
						   And I.Id_Cta_Banco =  @Id_Cta_Banco ) 
         END


    SET @Imp_Seguro      = (SELECT DBO.CFU_Finan_Creditos_Seguro(@Id_Producto_Seg,@Id_Cliente,@Fecha,@pCapital))

	SET @Imp_Gastos      = (SELECT DBO.CFU_Finan_Creditos_Gastos(@Amortizacion,@Intereses,@Iva_Intereses))

	SET @Imp_Final_Cuota = @ValorCuota + @Imp_Seguro + @Imp_Gastos
     
    INSERT INTO #Result VALUES (@Fecha,@NroCuota , @SaldoInicial, @ValorCuota, @Intereses, @Amortizacion, @AmortACum, @SaldoFinal,@Fecha_Pago
							,@Id_Cliente,@Razon_Social,@Id_Cliente_Externo,@Id_Cta_Banco,@Cuenta_Nro,@Cuenta_Descrip,@Imp_Seguro,@Imp_Gastos,@Imp_Final_Cuota )

	SET @NroCuota = @NroCuota + 1
	SET @SaldoInicial = @SaldoFinal
	SET @Fecha = DATEADD(mm,1,@Fecha)
END 

IF @SaldoFinal <> 0 
BEGIN
	UPDATE #Result SET Amortizacion = @Amortizacion + @SaldoFinal
	                 , ValorCuota = @ValorCuota + @SaldoFinal 
					 , AmortACum = @AmortACum + @SaldoFinal
					 , SaldoFinal = 0
	WHERE NroCuota = @pCuotas
END
IF ISNULL(@pNroCutoa,0) = 0
   SELECT * FROM #Result
ELSE
   SELECT * FROM #Result WHERE NroCuota = @pNroCutoa



DROP TABLE #Result

