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

CREATE FUNCTION dbo.CF_Ult_Cuota_Paga(@pId_Cliente INT, @pFecha DATETIME) 
RETURNS DATE
AS
BEGIN
DECLARE @Fecha_UCP					DATE
DECLARE @Tipo_Calculo				CHAR(1)		/*'V': "Mas Vieja Pagada", 'R': "Mas Reciente Pagada" */
DECLARE @Ult_Cuota_Paga				DATETIME
DECLARE @Ult_Cuota_Impaga			DATETIME
DECLARE @Fecha_Alta					DATETIME
DECLARE @Dia_Inicio_Sistema_Clever	DATE
DECLARE @Fam_CuotasSoc				INT

------------------------------------------------------------------------------------------------------------------------------------------------
/*
Tipo de Calculo cuando hay cuotas pagas y cuotas impagas:

EJ:
2/2020 Impago
3/2020 Pago

SI @Tipo_Calculo = 'V'
-----UCP: 1/2020

SI @Tipo_Calculo = 'R'
-----UCP: 3/2020
*/
SET @Tipo_Calculo = 'V' /*Mas Vieja Pagada*/

------------------------------------------------------------------------------------------------------------------------------------------------

SET @Dia_Inicio_Sistema_Clever = '20201001' /*Para importaciones de solo Deuda se considera la primer Cuota Paga el dia de puesta en Marcha de CleverSoft*/
SET @Fam_CuotasSoc = (dbo.CF_xParam('Fam_CuotasSoc'))
------------------------------------------------------------------------------------------------------------------------------------------------

SET @Ult_Cuota_Paga =(SELECT MAX(CI.Fecha_QA)
					FROM Cbtes CB, Cbtes_Items CI, Cbtes_Tipos CT, Productos PR
					WHERE
					CB.Id_Trans = CI.Id_Trans
					AND CB.Id_Tipo_Cbte = CT.Id_Tipo_Cbte
					AND CI.Id_Producto = PR.Id_Producto
					AND CT.Compromete_Factura = 1
					AND (CB.Id_Estado_Cbte = 2  OR (CB.Id_Estado_Cbte = 1 AND CI.Imp_Final = 0))
					AND PR.Id_Familia = @Fam_CuotasSoc
					AND PR.Vendible = 1
					AND CI.Id_Cliente = @pId_Cliente) 

------------------------------------------------------------------------------------------------------------------------------------------------

SET @Ult_Cuota_Impaga = (SELECT MIN(CI.Fecha_QA)
						FROM Cbtes CB, Cbtes_Items CI, Cbtes_Tipos CT, Productos PR
						WHERE 
						CB.Id_Trans = CI.Id_Trans 						
						AND CT.Id_Tipo_Cbte = CB.Id_Tipo_Cbte
						AND CI.Id_Producto = PR.Id_Producto
						AND CT.Compromete_Factura = 1
						AND (CB.Id_Estado_Cbte in (1,4) AND CB.Saldo <> 0) /*Se agrega saldo diferente a cero para que tome la max por los contratos que facturan en cero*/
						AND PR.Id_Familia = @Fam_CuotasSoc
						AND PR.Vendible = 1
						AND CI.Id_Cliente = @pId_Cliente)	

------------------------------------------------------------------------------------------------------------------------------------------------

/*CASO 1*/
IF(	
	(@Ult_Cuota_Paga IS NULL)				/*No tiene ninguna Factura en estado completo o pendiente con importe cero*/
	AND 
	(@Ult_Cuota_Impaga IS NULL)				/*No tiene ninguna Factura adeudada*/
)
BEGIN
	/*La fecha de ultima cuota paga se considera el dia que inicio el sistema de CleverSoft*/
	SET @Fecha_UCP = @Dia_Inicio_Sistema_Clever
	RETURN @Fecha_UCP
END

------------------------------------------------------------------------------------------------------------------------------------------------

/*CASO 2*/
IF(
	(@Ult_Cuota_Paga IS NULL)			/*No tiene ninguna Factura en estado completo o pendiente con importe cero*/
	AND 
	(@Ult_Cuota_Impaga IS NOT NULL)		/*Tiene al menos una Factura adeudada*/
)
BEGIN
	/*La fecha de ultima cuota paga se considera el mes anterior a la impaga*/
	SET @Fecha_UCP = DATEADD(MM, -1, @Ult_Cuota_Impaga)
	RETURN @Fecha_UCP
END

------------------------------------------------------------------------------------------------------------------------------------------------
	
/*CASO 3*/
IF(
	(@Ult_Cuota_Paga IS NOT NULL)		/*Tiene al menos una factura en estado completo o pendiente con importe cero*/
	AND 
	(@Ult_Cuota_Impaga IS NULL)			/*No tiene ninguna Factura adeudada*/
)
BEGIN
	/*La fecha de ultima cuota paga se considera la Fecha_QA mas reciente*/
	SET @Fecha_UCP = @Ult_Cuota_Paga
	RETURN @Fecha_UCP
END

------------------------------------------------------------------------------------------------------------------------------------------------

	
/*CASO 4*/
IF(
	(@Ult_Cuota_Paga IS NOT NULL) /*Tiene al menos una factura en estado completo o pendiente con importe cero*/
	AND 
	(@Ult_Cuota_Impaga IS NOT NULL)/*Tiene al menos una Factura adeudada*/
)
BEGIN

	IF (@Ult_Cuota_Impaga >= @Ult_Cuota_Paga) 
	BEGIN
		/*
		Caso Ejemplo:
		2/2020 Pago
		3/2020 Impago
		*/
		/*Cuota Impaga es mas reciente que la Cuota Paga*/
		/*La fecha de ultima cuota paga se considera el mes anterior a la impaga*/
		SET @Fecha_UCP = @Ult_Cuota_Paga
		RETURN @Fecha_UCP
	END
	ELSE
	BEGIN
		/*
		Caso Ejemplo:
		2/2020 Impago
		3/2020 Pago
		*/
		/*Cuota Impaga es anterior a la Cuota Paga*/		
		IF(@Tipo_Calculo = 'V' /*Mas Vieja Pagada*/)
		BEGIN
			/*La fecha de ultima cuota paga se considera la Fecha_QA mas reciente*/
			/*En Ejemplo: 1/2020*/
			SET @Fecha_UCP = DATEADD(MM, -1, @Ult_Cuota_Impaga)
			RETURN @Fecha_UCP
		END

		IF(@Tipo_Calculo = 'R' /*Mas Reciente Pagada*/)
		BEGIN
			/*La fecha de ultima cuota paga se considera la Fecha_QA mas reciente*/
			/*En Ejemplo: 3/2020*/
			SET @Fecha_UCP = @Ult_Cuota_Paga
			RETURN @Fecha_UCP
		END
	END
END

------------------------------------------------------------------------------------------------------------------------------------------------

RETURN ISNULL(@Fecha_UCP, @Dia_Inicio_Sistema_Clever)
END